轉自:https://blog.csdn.net/kingboyworld/article/details/77713743
在過去的兩年時間里,最讓人興奮、回頭率最高、最能改變游戲規則的東西,大概就是Spring Boot了。Spring Boot提供了一種新的編程范式,能在最小的阻力下開發Spring應用程序。有了它, 你可以更加敏捷地開發Spring應用程序,專注於應用程序的功能,不用在Spring的配置上多花功 夫,甚至完全不用配置。實際上,Spring Boot的一項重要工作就是讓Spring配置不再成為你成功路上的絆腳石。
一、自動配置
以往,在任何的spring項目中,你都會找到Java配置或一大堆的XML配置文件,它們為應用程序開啟了特定的特性和功能。看以下幾個例子:
1. web.xml
2.jdbcTemplate
3.事務管理
在以上三個例子中,很多配置都是復雜並且模板化,這提高了我們開發的成本。而在springboot中這些都自動為我們做好了,讓開發人員更加專注於業務需求的開發。
二、起步依賴
向項目中添加依賴是件富有挑戰的事。你需要什么庫?它的Group和Artifact是什么?你需要哪個版本?哪個版本不會和項目中的其他依賴發生沖突?Spring Boot通過起步依賴為項目的依賴管理提供幫助。起步依賴其實就是特殊的Maven依賴和Gradle依賴,利用了傳遞依賴解析,把常用庫聚合在一起,組成了幾個為特定功能而定制的依賴。舉個例子,假設你正在用Spring MVC構造一個REST API,並將JSON(JavaScript Object Notation)作為資源表述。此外,你還想運用遵循JSR-303規范的聲明式校驗,並使用嵌入式的Tomcat服務器來提供服務。要實現以上目標,你在Maven或Gradle里至少需要以下8個依賴:
org.springframework:spring-core org.springframework:spring-web org.springframework:spring-webmvc com.fasterxml.jackson.core:jackson-databind org.hibernate:hibernate-validator org.apache.tomcat.embed:tomcat-embed-core org.apache.tomcat.embed:tomcat-embed-el org.apache.tomcat.embed:tomcat-embed-logging-juli
不過,如果打算利用Spring Boot的起步依賴,你只需添加Spring Boot的Web起步依賴(org.springframework.boot:spring-boot-starter-web),僅此一個。它會根據依賴傳遞把其他所需依賴引入項目里,你都不用考慮它們。
比起減少依賴數量,起步依賴還引入了一些微妙的變化。向項目中添加了Web起步依賴,實際上指定了應用程序所需的一類功能(條件注入:發現有相應包就自動配置相應功能, @ConditionalOn*)。因為應用是個We b應用程序,所以加入了We b起步依賴。與之類似,如果應用程序要用到JPA持久化,那么就可以加入jpa起步依賴。如果需要安全功能,那就加入security起步依賴。
簡而言之,你不再需要考慮支持某種功能要用什么庫了,引入相關起步依賴就行。此外,Spring Boot的起步依賴還把你從“需要這些庫的哪些版本”這個問題里解放了出來。起步依賴引入的庫的版本都是經過測試的,因此你可以完全放心,它們之間不會出現不兼容的情況。
三、Actuator
Actuator則要提供在運行時檢視應用程序內部情況的能力。安裝了Actuator就能窺探應用程序的內部情況了,包括如下細節:
- Spring應用程序上下文里配置的Bean
- Spring Boot的自動配置做的決策
- 應用程序取到的環境變量、系統屬性、配置屬性和命令行參數
- 應用程序里線程的當前狀態
- 應用程序最近處理過的HTTP請求的追蹤情況
- 各種和內存用量、垃圾回收、Web請求以及數據源用量相關的指標
Actuator通過Web端點和shell界面向外界提供信息。如果要借助shell界面,你可以打開SSH(Secure Shell),登入運行中的應用程序,發送指令查看它的情況。
四、內嵌容器
可以通過配置插件,為springboot提供不同類型的容器。只需要通過java –jar 的方式即可啟動應用程序。
五、YML配置文件
傳統項目中使用properties文件作為key-value的載體,但其缺點也是明顯的。會重復的進行鏈式配置,而YML文件則避免了這個問題。
Properties文件方式
#Properties配置數據庫連接 spring.datasource.url=jdbc:mysql://localhost:3306/config spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Yaml文件方式
#YML配置數據庫連接 Spring: Datasource: url: jdbc:mysql://localhost:3306/config username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver
SpringBoot不是什么
因為Spring Boot實在是太驚艷了,所以過去一年多的時間里有不少和它相關的言論。原先聽到或看到的東西可能給你造成了一些誤解。
首先,Spring Boot不是應用服務器。這個誤解是這樣產生的:Spring Boot可以把We b應用程序變為可自執行的JAR文件,不用部署到傳統Java應用服務器里就能在命令行里運行。Spring Boot在應用程序里嵌入了一個Servlet容器(Tomcat、Jetty或Undertow),以此實現這一功能。但這是內嵌的Servlet容器提供的功能,不是Spring Boot實現的。
與之類似,Spring Boot也沒有實現諸如JPA或JMS(Java Message Service,Java消息服務)之類的企業級Java規范。它的確支持不少企業級Java規范,但是要在Spring里自動配置支持那些特性的Bean。例如,Spring Boot沒有實現JPA,不過它自動配置了某個JPA實現(比如Hibernate)的Bean,以此支持JPA。
最后,Spring Boot沒有引入任何形式的代碼生成,而是利用了Spring 4的條件化配置特性,以及Maven和Gradle提供的傳遞依賴解析,以此實現Spring應用程序上下文里的自動配置。
簡而言之,從本質上來說,Spring Boot就是Spring,它做了那些沒有它你自己也會去做的Spring Bean配置。你不用再寫這些樣板配置了,可以專注於應用程序的邏輯,這些才是應用程序獨一無二的東西。



