在很早以前,我發過javaweb系列教程,探索了從spring框架的配置整合到springboot,中間還講解了一個部落格小專案。具體資訊請訪問:https://acheng1314.cn
快速搭建springboot2框架
本專案的GitHub:https://github.com/pc859107393/Go2SpringBoot.git
有興趣交流springboot進行快速開發的同學可以加一下下面的企鵝群。
為什麼要使用springboot?
在很早以前,我的專案中探索Spring+SpringMvc+Druid+Mybatis框架整合的時候,我們可是花了兩個章節詳細的討論spring框架的整合,同樣的哪怕是一個熟練的Java程式設計師要搭建一個完整穩定的框架也要很長的時間。 但是springboot解決了這個問題,筆者現在搭建一個springboot專案僅僅需要幾分鐘時間。下面我們一起一點點的看下去。
需要的工具
- JDK1.8
- IntelliJ IDEA 2018.1.4(目前我所使用的最低版本)
- MySQL、Navicat或DataGrip
- 構建工具:maven或gradle,推薦使用gradle,畢竟我用的gradle
- 其他,後續使用到的地方我們持續跟進
- git,使用是這個工具去我的github上面同步專案:https://github.com/pc859107393/Go2SpringBoot.git
建立專案
按照前面專案的國際慣例,使用IntelliJ IDEA構建專案,這一次還是像以前一樣貼出圖片。
①. 在idea的歡迎介面,我們選擇Create New Project
,如圖1.1所示。
圖1.1 歡迎介面
②. 接著我們選擇左側的Spring Initializr
然後點選next
,進入Project Metadata
介面,如圖1.2所示。
圖1.2 選擇Spring專案初始化
③. 緊接著開始配置專案的基本引數,我們在這裡一點點的實現,如圖1.3所示。
圖1.3 配置專案基本引數
在圖1.3中,我們需要著重注意的是: 專案型別設定為Gradle project,開發語言我選擇的是kotlin,打包方式jar,java語言版本是8,其他的引數大家自行百度
④. 完成了上面的專案引數配置後,我們接著選擇專案資源依賴。專案資源依賴也就是我們需要使用哪些jar包擴充套件。介面如圖1.4所示。
圖1.4 選擇專案依賴資源
在上面的圖1.4中,左邊是資源的父類別,中間是具體的資源詳細名稱,右邊是我們選中的依賴,同樣的已經把目錄層級展示出來了,大家請根據我選中的做出相應的選擇。注意:SpringBoot版本我們預設就行。
⑤. 當我們把圖1.4點選next
後,進入了一個專案目錄命名環節,我們可以取自己心儀的名字。注意:寫完名字不要立即點選finish!寫完名字不要立即點選finish!寫完名字不要立即點選finish!
在這裡我們有一個很值得注意的小細節,在這裡我們可以加快專案構建速度。
1. gradle專案的構建是需要gradle環境的。
2. gradle和maven一樣是進行遠端資源依賴的,所以合理的遠端資源倉庫可以加快構建速度(資源下載速度快了,減少大部分等待時間)。
3. 修改檔案內容 專案目錄->gradle->wrapper->gradle-wrapper.properties 中的distributionUrl的值為:http\://7xlmzq.com1.z0.glb.clouddn.com/gradle-4.5.1-bin.zip
4. 在專案中的build.gradle檔案中修改repositories欄位相關的內容。新增如下內容:
maven { url "http://maven.aliyun.com/nexus/content/repositories/central" }
複製程式碼
⑥. 做完這兩步後,我們就可以選擇finish進入專案中。 大概模樣如圖1.5所示。
圖1.5 專案構建完成
新增依賴資源
在傳統的JavaWeb應用中,我們一般採用經典三層來解決問題,經典三層指: dao->service->web,同樣的我們這裡也先來整合這三層。
①. 開啟build.gradle
,檢視底部的dependencies
包含哪些依賴。這個時候專案的依賴應該如下所示:
dependencies {
//aop支援
compile('org.springframework.boot:spring-boot-starter-aop')
//快取
compile('org.springframework.boot:spring-boot-starter-cache')
//快捷生成RESTFul文件
compile('org.springframework.boot:spring-boot-starter-data-rest')
//模板引擎
compile('org.springframework.boot:spring-boot-starter-freemarker')
//資料校驗
compile('org.springframework.boot:spring-boot-starter-validation')
//傳統的web
compile('org.springframework.boot:spring-boot-starter-web')
//新的webflux
compile('org.springframework.boot:spring-boot-starter-webflux')
//mybatis的支援
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2')
//Kotlin支援
compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
compile("org.jetbrains.kotlin:kotlin-reflect")
//springweb專案快速重啟
runtime('org.springframework.boot:spring-boot-devtools')
//mysql連結
runtime('mysql:mysql-connector-java')
//測試支援
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('io.projectreactor:reactor-test')
//在上面的依賴中 compile是任何時候都需要的依賴,runtime是緊緊在執行時需要依賴,testCompile是在測試的編譯和執行時候均需要。
}
複製程式碼
在以前我的系列教程中,我們主要採用了哪些框架呢?主要採用了:Spring+SpringMvc+Mybatis+Druid+SpringFox,所以這些組成一個完整web應用的框架集合是不能少的,所以我們需要加入下面的一些依賴。
compile 'com.alibaba:druid-spring-boot-starter:1.1.9'
compile 'com.google.code.gson:gson:2.7'
//mybatis-plus外掛支援
compile 'com.baomidou:mybatis-plus:2.3'
compile 'com.baomidou:mybatis-plus-boot-starter:2.3'
compile "io.springfox:springfox-swagger2:${springfoxVersion}"
compile "io.springfox:springfox-staticdocs:2.6.1"
compile "io.springfox:springfox-swagger-ui:${springfoxVersion}"
compile 'com.github.xiaoymin:swagger-bootstrap-ui:1.7.2'
複製程式碼
個人原因經常使用gson,上面的springfoxVersion='2.8.0'
接著我們重新整理gradle或者選擇右下角提示的 Import Changes,匯入我們加入的依賴資源。到這一步我們的依賴新增完畢。
框架整合
其實框架整合無外乎就是這些基於Spring的bean模式構建的各個bean協調工作,這一點在傳統手動配置的Spring應用中是一個很難很繁瑣的過程。但是我們springboot時代,一切都簡化了,我們只需要找到相應資源的官方文件,參照文件進行整合就行了。
我整合的配置檔案application.properties
如下:
debug=false
trace=false
# Druid連線池配置,官方配置參考:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
spring.datasource.druid.url=jdbc:mysql://localhost:3306/cc_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true
spring.datasource.driver-class-name= com.mysql.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=laopo5201314
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-wait=10
spring.datasource.druid.filters=stat,wall
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
# 配置StatFilter
spring.datasource.druid.filter.stat.db-type=mysql
spring.datasource.druid.aop-patterns= -cn.acheng1314.*
# 配置WallFilter
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=mysql
spring.datasource.druid.filter.wall.config.delete-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false
## Druid WebStatFilter配置,說明請參考Druid Wiki,配置_配置WebStatFilter
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico,/druid/*
#
## Druid StatViewServlet配置,說明請參考Druid Wiki,配置_StatViewServlet配置
#spring.datasource.druid.stat-view-servlet.enabled=true
#spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
#spring.datasource.druid.stat-view-servlet.reset-enable=true
#spring.datasource.druid.stat-view-servlet.login-username=admin
#spring.datasource.druid.stat-view-servlet.login-password=admin
#spring.datasource.druid.stat-view-servlet.allow=
#spring.datasource.druid.stat-view-servlet.deny=
#事物提交失敗回滾和aop
spring.transaction.rollback-on-commit-failure=true
spring.aop.auto=true
spring.aop.proxy-target-class=true
spring.http.encoding.force=true
spring.http.encoding.force-request=true
spring.http.encoding.charset=utf-8
spring.http.converters.preferred-json-mapper=jackson
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=1024mb
spring.servlet.multipart.max-request-size=1024mb
#freemarker配置
spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.cache=true
spring.freemarker.content-type=text/html
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.enabled=true
spring.freemarker.suffix=.ftl
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
spring.freemarker.request-context-attribute=req
server.port=8181
spring.resources.static-locations=classpath:/static/
#Mybatis配置,官方參考:http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
mybatis.mapper-locations=classpath:/mapper/*.xml
mybatis.type-aliases-package=cn.acheng1314.base.domain
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.use-generated-keys=true
mybatis.configuration.use-column-label=true
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.type-aliases-package=cn.acheng1314.base.domain
#主鍵型別 0:"資料庫ID自增", 1:"使用者輸入ID",2:"全域性唯一ID (數字型別唯一ID)", 3:"全域性唯一ID UUID";
mybatis-plus.global-config.id-type=0
#欄位策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
mybatis-plus.global-config.field-strategy=0
#駝峰下劃線轉換
mybatis-plus.global-config.db-column-underline=true
#重新整理mapper 除錯神器
mybatis-plus.global-config.refresh-mapper=true
mybatis-plus.global-config.capital-mode=true
mybatis-plus.configuration.cache-enabled=true
mybatis-plus.configuration.map-underscore-to-camel-case=true
#配置檔案設定請參考官網文件:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#production-ready-endpoints
複製程式碼
在上面的配置檔案中,我們在專案開發目錄中resources
對應編譯後的目錄為classes
。
至此為止,我們的框架整合差不多完成,具體的細節,我建議大家還是去官網文件檢視一下。當然最重要的還是框架整合的基礎思想,有興趣的童鞋可以檢視我以前的相關教程。
測試整合效果
①. 測試json輸出,程式碼如下:
@GetMapping(value = ["/"], produces = [MediaType.APPLICATION_JSON_UTF8_VALUE])
@ResponseBody
fun MainLocal(): Any = User("程", "18976962315", "123456", "吹牛", Date())
複製程式碼
②. 測試freemarker頁面渲染
@GetMapping(value = ["/test"], produces = [MediaType.TEXT_HTML_VALUE])
fun getTest(map: ModelMap): String {
map["test"] = MainLocal()
return "test1"
}
複製程式碼
具體的測試頁面不用再放出來了,同樣這種類似的測試也可以考慮使用Spring的相關測試框架來檢查。