文章目錄
照着演講資料的去寫的簡單易懂,同時兼顧技術文檔的條理性和深入性。
spring是一個單純的java開發框架,spring-boot是把腳手架也做了進去,構建、打包和不同層面模塊的集成,都做了更好的優化。
文檔寫的非常好。
1. Overview
2. Getting started
what,how and why have the Spring boot。
2.1 spring boot 是什麼
使創建一個獨立部署,產品級的spring-based的應用更容易。
目的
- 對於Spring的開發者,提供更快和更廣泛的開始
- 開箱即用,但是又可以對變化的需求快速的響應
- 爲項目提供大量且廣泛的非功能性需求(內嵌的servers,安全,metric,health checks 和擴展性配置)
- 絕對沒有代碼生成和不需要xml配置
2.2 系統需求
System Requirements
2.2.1 Servlet Containers
2.3 安裝Spring boot
要求JDK 8+
2.3.1 安裝基礎軟件
maven
maven 3.3+ ,idea直接解決
gradle
2.3.2 Spring Boot CLI 安裝
2.3.3 Spring boot版本的升級
舊版本的升級。
2.4 開發第一個Spring boot應用(傻瓜式不講解)
關注點在於基礎pom的作用
2.4.1 創建pom
2.4.2 添加依賴
Starters
Spring boot提供很多"Starters",讓你去把jar添到classpath。使用spring-boot-starter-parent
去做冒煙測試。
同時spring-boot-starter-parent
也會提供有用的Maven默認設置。
比如這會用一個spring-boot-starter-web
。
寫幾行代碼 code
@RestController
相當於@Controller + @ResponseBody。@ResponseBody就是把返回值序列化成字符串。
@EnableAutoConfiguration
會猜測你的配置比如spring-boot-starter-web
就會猜你要開啓Spring MVC和Tomcat,它會初始化一系列的bean。
auto-configuration被設計來和"Starters"一起工作,但是兩個概念沒有強綁。你可以自有的選擇在starters之外的jar包,Spring Boot 也會做最好的自動配置。
運行 run
maven 命令去執行
打包 jar(fat jar的由來)
我們的例子依賴着包含着容器的jar文件(意味值包含依賴)。執行的jar包有時候會被稱爲"fat jars",它會包含你運行時的所有依賴。
Executable jars和Java
java本身不能提供一個標準的方式去內嵌依賴的jar文件。當你想要發佈一個容器的應用的時候,可能會有問題(沒依賴)。
解決的辦法是很多開發者使用了uber
的jars。一個uber的jar打包了所有應用的依賴到一個獨立的結構裏面。這種方式的問題是很難去看到你應用裏到底用了那些libraries,也會導致同名文件的覆蓋。Spring Boot 會採取不同的方法讓你內嵌jar包,後面會講到。
maven插件
負責來打包,需要把這個加到pom中去
3使用 Spring Boot
這個章節告訴你使用SpringBoot的細節
3.1 構建系統
推薦你是用成熟的構建系統比如maven和Gradle,也方便去推送到maven倉庫。也支持其他系統比如Ant
- maven
- grale
- ant
3.1.1 依賴管理
3.1.2 maven
使用spring-boot-starter-parent
來設定默認設置。
- Java 1.8作爲默認編譯級別
- UTF-8 source encoding
- 依賴管理的繼承,使你不用取指定一些依賴的
version
自動獲得默認的版本 - 打包階段會有 repacke的標記
- 明智的 resource filtering
- 明智的插件管理(exec plugin,Git commit ID 和shade)
- 明智的的資源 過濾,對application.properties和application.yml
注意application.properties和application.yml接受${…}
。
maven接受@..@
佔位符,你也可以使用resource.delimiter
來覆蓋maven的屬性。
3.1.5 Starts列表
Starter是一些列便利的依賴描述器包含在你的應用裏。可以一站式獲取spring的特性,甚至不需要複製粘貼或者通過簡單的的code來體驗。比如你想要使用Spring 和JPA來訪問database,僅許喲在你的依賴裏包含
spring-boot-starter-data-jpa
。
starter包含了大量你需要添加在項目裏的依賴。
什麼是name
所有官方的offical starter都有相似的開始spring-boot-starter-*
。這個命名結構意味着幫你用name去找到starters。
下列創建一個你自己的starter裏面會介紹,第三方的starter不應該以spring-boot
開頭,推薦thirdpartyproject-spring-boot-starter
3.2 結構化你的代碼
好的實踐
3.2.1 使用default
Package
當一個類沒有packge
聲明的時候,它被默認在defalut
。但是默認的package應該被避免。因爲使用
@ComponentScan, @ConfigurationPropertiesScan, @EntityScan
, 或者 @SpringBootApplication
,每一個jar裏面的類都會被讀到。
3.2.2 定位main的應用類
我們推薦把應用的main類放在root package下。@SpringBootApplication
註解常常會替代你的主類,也會影響到你搜索路徑路徑包的base package。例如被和JPA一起使用時,@SpringBootApplication
註解類標註的註解,會搜索所有@Entity
。使用root package的好處是會搜索項目裏所有的組件。
典型的代碼結構
@SpringBootApplication標註的main
3.3 配置類
雖然可以使用xml來配置,但是推薦使用單獨的@Configuration
類配置。
3.3.1 導入額外的配置類
你需要把你所有的@Configuration 都導入一個單獨的類@Import
。出此外你可以使用@ComponentScan
會自動撿起所有的Spring 組件,包括@Configuration
3.3.2 Importing XML Configuration
我們推薦你用@Configuration,但是你還是可以使用@ImportResource
去加載。
3.4 Auto-configuration
這個機器企圖去根據你添加的jar依賴,來自動自動配置。比如HSQLDB在你的classpath下,無需手動,Spring auto-config會自動在內存中配置好database。
你需要做的是添加@EnableAutoConfiguration
或者@SpringBootApplication
到你的一個@Configuration類上。
由於只需要添加一個
@EnableAutoConfiguration
或者@SpringBootApplication
,所以我們推薦你添加在你主要的@Configuration就可以了。
3.4.1 灰度替換 Auto-configuration
自動配置是無侵入的,但是你有時需要去用自己的配置來代替自動配置。比如你定義了DataSource
bean。默認的內嵌database就作爲被封。
如果你需要去看那些自動裝配被使用了,啓動你的應用時附帶-debug
。這樣會打開debug的log
3.4.2 關掉特殊的自動裝配。
使用exclude去除
如果不在classpath路徑下,你可以使用excludeName
屬性去匹配。
如果你不用@SpringBootApplication
而是使用@EnableAutoConfiguration
,的話,也可以使用exclude
和excludeName
。最終你也可以用
spring.autoconfigure.exclude
。
3.5 依賴注入 Spring Beans and Dependency Injection
你依舊可以使用@ComponentScan和@Autowired。
如果你的代碼結構像上面介紹的那樣,僅需要@ComponentScan,就可以自動註冊
@Component, @Service, @Repository, @Controller
下面使用構造器的方式去初始化bean
如果一個類只有一個構造器可以省去@Autowired
注意final 意味着不能被子類改變
3.6 使用 @SpringBootApplication
Annotation
- @EnableAutoConfiguration會自動打開自動auto-configuration裝置
- @ComponmentScan,會自動掃描application所在的包的所有@Compent
- @Configuration:荀彧在context裏註冊額外的beans,或導入額外的配置類。
沒有什麼東西是強制的,不想用auto-configuration和CompentScan時,你可以選擇關閉掉。
3.7 啓動你的應用
在你的應用中內置一個HTTP server的最大好處是,你可以隨時的運行它,而不要額外的插件或者擴展。spring boot也是。
3.7.1 打開你的IDE
導入
方式一:可執行包
打成執行包使用java -jar
方式二:使用maven
mvn spring-boot run
可以用MAVEN_OPTS=-Xmx1024m
來控制maven環境變量
方式三: 熱替換
spring boot只是僅僅繼承了java應用和jvm熱替換,開箱即用。
spring-boot-devtools
種包含了熱替換
3.8 Developer Tools 開發工具
開發工具有一堆工具在開發階段有用
引入
3.8.1 設置默認屬性
3.8.2 自動重啓
3.8.2 熱加載
3.8.4 全局設置
3.8.5 遠程應用
遠程應用啓動
遠程更新
監控文件變動
3.9 爲生產環境打包
可執行的jar,本來就是一個fat.jar,包含了需要的依賴,所以適合雲環境下的部署。
對於生產環境額外的特性,比如健康檢查,auditing,或者metric Rest或者JMX終端,考慮添加spring-boot-actuator
。