前兩季完成了spring+springMvc+mybatis+Druid+Shiro+Ehcache框架的整合、使用。同時也展開了對專案簡單重構,更多的時候我們學會了利用框架偷懶。
當然本著偷懶精神,同時帶著群友的呼聲,我們不妨來看看springBoot相關的資訊。
但是要明白一點,無論以前還是現在,spring相關的只要核心沒變,就算外在形式變化了,只要我們保證實質不變化,那麼還是差不多沒變的。
本專案github倉庫:github.com/pc859107393…
本專案國內碼雲倉庫:git.oschina.net/859107393/M…
本系列為連載文章。當然如果你沒有spring基礎,建議你先看看我的java手把手教程
當然我的簡書訪問速度更快
有興趣交流springboot進行快速開發的同學可以加一下下面的企鵝群。
分析springboot。
首先百度一下springboot、springmvc的區別。
Spring MVC 是基於 Spring 的一個 渲染web的MVC 框架。
Spring Boot 是基於 Spring 的條件註冊的一套快速開發整合包。
大概意思就是上面這樣描述,對不對呢?其實我們根據以往的經驗,再去看看springboot的源包也就可以看到大概了。
引入springboot
我們還是一樣進行gradle引入。
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot
compile group: 'org.springframework.boot', name: 'spring-boot', version: '1.5.4.RELEASE'複製程式碼
在gradle自動引入依賴完成後,我們可以看到springboot自動引入瞭如下資源:
- spring-boot:1.5.4.RELEASE
- spring-aop:4.3.9.RELEASE
- spring-beans:4.3.9.RELEASE
- spring-context:4.3.9.RELEASE
- spring-core:4.3.9.RELEASE
- spring-expression:4.3.9.RELEASE
到了這裡我們就可以明白上面對springBoot的概述。也就是自動註冊一堆框架提供給我們使用。
那麼,我們能不能快速的整合更多的框架呢?
首先我在spring4all社群找到了一款整合了Druid的快速啟動框架:druid-spring-boot。同時,我還看到了泥瓦匠BYSocket寫的springBoot教程。所以,我找到了更為快捷的辦法。
繼續gradle引入資源:
//druid-spring-boot-starter
compile('com.github.drtrang:druid-spring-boot-starter:1.0.3') {
exclude group: 'com.alibaba'
}複製程式碼
在上面的程式碼中,exclude group: 'com.alibaba'的意思是排除組織是com.alibaba的包。為什麼排除呢?主要是作者用的阿里巴巴的包相對舊一點和他github上面的包不一致。
接著我們一次把需要的包全部匯入,如下:
compile 'com.alibaba:druid:1.1.2'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent
compile 'org.springframework.boot:spring-boot-starter-parent:1.5.4.RELEASE'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
compile 'org.springframework.boot:spring-boot-starter-web:1.5.4.RELEASE'
runtime 'mysql:mysql-connector-java:5.1.39'
testCompile 'org.springframework.boot:spring-boot-starter-test:1.5.4.RELEASE'複製程式碼
可以看到我們再次匯入了Druid。同時,我們匯入了:
- spring-boot-starter-parent
- spring-boot-starter-web
- mysql-connector
- spring-boot-starter-test
有了上面的包後,我們接著是刪掉前面的spring-boot,畢竟springboot太大了。,所以最後我們gradle目前的引入資源是:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
// https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter
compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0'
compile 'com.squareup.okhttp3:okhttp:3.8.1'
//druid-spring-boot-starter
compile('com.github.drtrang:druid-spring-boot-starter:1.0.3') {
exclude group: 'com.alibaba'
}
compile 'com.alibaba:druid:1.1.2'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent
compile 'org.springframework.boot:spring-boot-starter-parent:1.5.4.RELEASE'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
compile 'org.springframework.boot:spring-boot-starter-web:1.5.4.RELEASE'
runtime 'mysql:mysql-connector-java:5.1.39'
testCompile 'org.springframework.boot:spring-boot-starter-test:1.5.4.RELEASE'
}複製程式碼
這個時候我們直接新建一個類,來啟動springboot。
/**
* Spring Boot 應用啟動類
*
* @author acheng
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// 程式啟動入口
// 啟動嵌入式的 Tomcat 並初始化 Spring 環境及其各 Spring 元件
SpringApplication.run(Application.class,args);
}
}複製程式碼
如無意外,這裡絕對是報錯(提示我們Druid需要的DataSource建立失敗,然後結束執行)。哈哈哈,大家肯定覺得筆者是傻瓜,為什麼明明知道有錯還哈哈哈。這裡其實涉及到一個問題,那就是框架整合以及框架需要的配置支援,當然這個在springboot中叫做約定!
我們看一下匯入的Druid-Starter相關的專案介紹!
框架作者明顯告訴我們需要建立一個application.yml的約定檔案來配置Druid相關的引數。
偷懶直接引入作者的檔案,再作適當的修改,結果如下:
debug: false
logging:
level:
root: info
org.springframework: info
org.springframework.jdbc: debug
org.mybatis: debug
com.github.trang: debug
spring:
profiles:
# 預設環境為 default,多資料來源演示請改為請參考git上面的demo
active: default
output:
ansi:
enabled: always
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ccdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true
username: root
password: laopo5201314
druid:
# spring.datasource.druid 字首的配置將注入到 DruidParentDataSource,作為公共引數
initial-size: 1
min-idle: 1
max-active: 10
max-wait: 30000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 1800000
max-evictable-idle-time-millis: 25200000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: true
test-on-return: false
pool-prepared-statements: true
max-open-prepared-statements: 20
use-global-data-source-stat: true
stat:
db-type: mysql
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
slf4j:
enabled: true
connection-log-enabled: false
connection-log-error-enabled: true
statement-log-enabled: false
statement-log-error-enabled: true
statement-sql-pretty-format: true
statement-executable-sql-log-enable: true
result-set-log-enabled: false
result-set-log-error-enabled: true
wall:
enabled: true
db-type: mysql
log-violation: true
throw-exception: false
config:
select-all-column-allow: false
config:
enabled: false #關閉密碼加密(為true時候需要利用Druid進行加密資料庫密碼)
aop-stat: #aop狀態監測
enabled: true
patterns:
- acheng1314.cn.*
web-stat: #web狀態監測
enabled: true
stat-view-servlet: #開啟Druid的web監測頁面
enabled: true
transaction:
rollback-on-commit-failure: true
aop:
auto: true
proxy-target-class: true
http:
encoding:
force: true
converters:
preferred-json-mapper: gson
# 開始設定mybatis,具體的意思請參照我前面的的手把手教程
mybatis:
type-aliases-package: acheng1314.cn.domain
mapper-locations: "classpath:acheng1314/cn/dao/*.xml"
configuration:
map-underscore-to-camel-case: true
use-generated-keys: true
use-column-label: true
---
debug: false
spring:
profiles: default複製程式碼
關於上面的配置檔案其實沒有多大的必要仔細闡述,畢竟大部分都是Druid的配置!上面Druid-Starter和我以前專案的配置檔案互相參考基本可以完成這些配置。同時我在上面把mapper和dao扔到了一起。
接著我們可以啟動專案來看看,我們預設的首頁可以再網頁上面輸出一串json,如下:
程式碼也是很簡單,大概如下:
@RestController
public class HelloWorldController {
@GetMapping(value = "/", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public Object sayHello() {
Map<String, Object> map = new HashMap<>();
map.put("aaa", "aaaa");
return map;
}
}複製程式碼
其實到這裡,目前的專案已經差不多了。但是,這不是我們的目標,我們還應該考慮APIDocs、快取、許可權驗證等等。
接入APIDocs——>SpringFox
相對來說,這個就是容易的多了。
引入資源
compile "io.springfox:springfox-swagger2:2.7.0"
compile "io.springfox:springfox-staticdocs:2.6.1"
compile "io.springfox.ui:springfox-swagger-ui-rfc6570:1.0.0"複製程式碼
引入對應的設定
在這裡所謂的引入設定,我們完全可以是配置java程式碼
@EnableSwagger2
public class SwaggerConfiguration {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2) //Docket,Springfox的私有API設定初始化為Swagger2
.select()
.paths(PathSelectors.any())
.build()
.apiInfo(new ApiInfoBuilder() //設定API文件的主體說明
.title("acheng的SpringBoot探索之路ApiDocs")
.description("acheng的SpringBoot探索之路")
.version("v1.01")
.termsOfServiceUrl("http://acheng1314.cn/")
.build());
}
}複製程式碼
到了這裡,我們並沒有完,還需要簡單的把SpringFox的配置注入到專案中。如下:
/**
* Spring Boot 應用啟動類
*
* @author acheng
*/
@SpringBootApplication
@MapperScan("acheng1314.cn.dao") //提供dao檔案
@EnableWebMvc
@ComponentScan(basePackages = "acheng1314.cn.controller")
@Import(SwaggerConfiguration.class)
public class Application extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
// 程式啟動入口
// 啟動嵌入式的 Tomcat 並初始化 Spring 環境及其各 Spring 元件
SpringApplication.run(Application.class, args);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}複製程式碼
然後我們啟動專案,在瀏覽器位址列中輸入:
http://localhost:8080/swagger-ui.html#/
http://localhost:8080/druid
http://localhost:8080/複製程式碼
上面這幾個地址均能正常訪問! 仔細看看是不是比當初我們的spring+springMvc+Druid+mybatis整合更加容易呢?本期專案到這裡就算是結束了。
如果你認可我所做的事情,並且認為我做的事對你有一定的幫助,希望你也能打賞我一杯咖啡,謝謝。