spring boot的每個版本都提供了它所支持的依賴項列表。在使用時,你不須要在你的配置中爲這些依賴提供版本,由於spring boot爲你管理版本。當你升級spring boot後,這些依賴也會一致更新。java
注意:若是你須要的話,能夠本身指定一個版原本覆蓋spring boot推薦的版本,但每個spring boot都與一個spring framework聯繫,最好不要本身制定spring framework的版本mysql
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> </parent>
經過繼承啓動項,來從spring boot中獲取默認值。web
其實,spring boot啓動器繼承了父項目spring
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.6.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath> </parent>
在這個父項目裏指定了默認的要使用的其餘啓動器的版本。sql
所以,在咱們導入依賴時,咱們只須要指定的就是spring boot啓動器的版本號,咱們要導入其餘啓動器能夠不用指定版本號就能夠安全使用了。數據庫
若是咱們須要咱們要使用本身特定版本的包,咱們能夠經過下面的方式指定版本,緩存
<properties> <mysql-connector-version>指定的版本</mysql-connector-version> </properties>
而後再須要指定的版本處經過$引用便可。安全
若是咱們的項目須要繼承本身的父項目,那麼咱們能夠經過顯示地聲明全部的Maven配置。springboot
若是不想使用spring-boot-starter-parent
,咱們仍然能夠經過更改其依賴範圍scope=import
來使用依賴管理。bash
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Spring Boot包含一個Maven插件,能夠將項目打包爲可執行jar包。 若是要使用插件,請將其添加到<plugins>
部分,如如下示例所示:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
若是使用Spring Boot starter父項目,則只須要添加插件即可使用。不須要配置它,除非你想更改插件在父類中的默認設置。
啓動器是能夠包含在應用程序中,極大的方便咱們對依賴的管理。
經過啓動器,咱們能夠將spring和其餘相關技術的依賴所有配置好,而不用像普通項目同樣要一個一個去maven中央倉庫複製粘貼。
例如:若是你要使用spring和JPA來進行數據庫的訪問,那麼你只要添加spring-boot-starter-data-jpa
依賴,就能夠將要使用的jar包和jar依賴的相關jar包所有導入項目。
啓動器命名方式:
全部官方的啓動器都遵循相似的命名方式。 spring-boot-starter-*
,其中*是特定類型的應用程序。 這種命名結構可讓咱們快速找到須要的啓動器。
而第三方啓動程序一般以項目名稱開頭。 例如,一個名爲thirdpartyproject的第三方啓動程序項目一般會被命名爲thirdpartyproject-spring-boot-starter。
一個項目最好結構井井有條,下面是一個示例:
com +- example +- myapplication主程序 +- Application.java | +- customer | +- Customer.java | +- CustomerController.java | +- CustomerService.java | +- CustomerRepository.java | +- order +- Order.java +- OrderController.java +- OrderService.java +- OrderRepository.java
主程序中會聲明main方法和最基本的@SpringBootApplication
註解
package com.example.myapplication; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Spring Boot支持基於Java的配置。在使用spring時,咱們經過xml文件進行配置。而spring boot咱們經過配置類來進行配置。@Configuration註解的類即是配置類,配置類能夠有多個,一般咱們將有main方法的類做爲主配置類。
您不須要將全部@Configuration配置類放在一個類中。使用@Import註釋能夠導入其餘配置類。或者使用@ComponentScan來自動獲取全部Spring組件,包括@Configuration類。
若是你必定要使用基於XML的配置,仍然建議從配置類開始。
在一個@Configuration標註的配置類上,使用@ImportResource(xml配置文件路徑),就能夠將xml中的配置的內容導入並生效。
Spring Boot自動配置嘗試根據所添加的jar依賴項自動配置Spring應用程序。
也就是說,咱們添加的jar包使用時需咱們要配置一些bean,spring boot會自動幫咱們配置,咱們能夠直接使用而不用再去配置了。例如,若是HSQLDB在您的類路徑中,而且您沒有手動配置任何數據庫鏈接bean,那麼Spring Boot將自動配置內存中的數據庫。
你能夠經過在@Configuration配置類上加上@EnableAutoConfiguration或@SpringBootApplication(主程序)來使其開啓自動配置。
注意:咱們應該只添加一個@SpringBootApplication或@EnableAutoConfiguration註釋。咱們一般只向主@Configuration類(有main方法的類)添加@SpringBootApplication註解。
自動配置當然方便,可是默認的配置畢竟不可能知足咱們的全部需求。這是咱們就須要更改或添加本身的配置了。
spring boot的自動配置是非侵入性的。咱們能夠經過自定義配置,以替換自動配置的相應的部分。 例如,若是您添加本身的DataSource bean,則默認的嵌入式數據庫支持將退出。
若是你須要瞭解當前正在應用哪些自動配置以及緣由,可使用--debug
開關啓動你的應用程序。 這樣作能夠啓用調試日誌,來讓控制檯打印生效的自動配置類。
若是你發現應用了不想要的自動配置類,可使用@SpringBootApplication的exclude屬性(在類路徑下)來禁用它們,以下面的示例所示:
import org.springframework.boot.autoconfigure.*; import org.springframework.boot.autoconfigure.jdbc.*; @SpringBootApplication(exclude={DataSourceAutoConfiguration.class}) public class MyApplication { }
若是要禁用的類不在類路徑中,則可使用註解的excludeName
屬性,並指定禁用的自動配置類的全類名。 若是你更喜歡使用@EnableAutoConfiguration
而不是@SpringBootApplication
,使用exclude
和excludeName
屬性也是同樣的。
除此以外,你還能夠在全局配置文件application.properties使用spring.autoconfigure.exclude
屬性指定要排除的自動配置類的列表。
您能夠自由使用任何標準的Spring Framework技術來定義bean以及注入依賴項。
爲簡單起見,咱們發現使用@ComponentScan(查找您的bean)和使用@Autowired(進行構造函數注入)效果很好。
若是按照第二節的建議構造代碼(將應用程序類定位在根包中),能夠添加@ComponentScan,而不須要任何參數,@ComponentScan也可省略。
全部應用程序組件(@Component、@Service、@Repository、@Controller等)都自動註冊爲Spring bean。
這是由於@SpringBootApplication
和@EnableAutoConfiguration
會自動掃描本身所在的包及其子包。
下面的示例顯示了一個@Service
Bean,它使用構造函數注入來得到所需的RiskAssessor
Bean。
package com.example.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class DatabaseAccountService implements AccountService { private final RiskAssessor riskAssessor; @Autowired public DatabaseAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; } // ... }
ioc容器在將@Service標註的類註冊到容器中時,會調用其構造方法,構造方法的調用,使咱們得到了所需的RiskAssessor
Bean。不過咱們要知道的是,構造方法的參數的值也來自ioc容器。
若是一個bean只有一個構造器,@Autowired
可忽略不寫。
以下方所示:
@Service public class DatabaseAccountService implements AccountService { private final RiskAssessor riskAssessor; public DatabaseAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; } // ... }
許多Spring Boot開發人員喜歡他們的應用程序使用自動配置,組件掃描,並可以在其「應用程序類」上定義額外的配置。
單個@SpringBootApplication註解能夠同時啓用這三個功能,即:
@EnableAutoConfiguration
: 開啓spring boot的自動配置機制@ComponentScan
:對應用程序所在的包啓動自動掃描@Configuration
: 容許在上下文中註冊額外的bean或導入額外的配置類所以咱們在應用程序類上使用@SpringBootApplication
最佳
package com.example.myapplication; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication // 至關於 @Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@SpringBootApplication
還爲@EnableAutoConfiguration
自動配置的bean和@ComponentScan
掃描的bean提供了別名。即類名首字母小寫
@SpringBootApplication
的使用不是強制性的,若是須要的話,可使用須要的功能就夠了。
將應用程序打包爲jar並使用嵌入式HTTP服務器的最大優勢之一是能夠像運行其餘應用程序同樣運行應用程序。調試Spring啓動應用程序也很容易。您不須要任何特殊的IDE插件或擴展。
以Maven應用導入IDE中,能夠像運行簡單的java應用程序同樣運行spring boot應用。
若是你是使用Spring Boot Maven或Gradle插件建立可執行jar包,則可使用java -jar運行應用程序,如如下示例所示:
$ jar -jar myapplication-0.0.1-SNAPSHOT.jar
Spring Boot包含一組額外的工具,可使應用程序開發體驗更好。spring-boot-devtools模塊能夠包含在任何項目中,以提供開發時的特性。要包含devtools支持,將模塊依賴項添加到的構建中便可。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies>
在運行徹底打包的應用程序時,將自動禁用開發人員工具。
若是您的應用程序是從java -jar啓動的,或者是從一個特殊的類加載器啓動的,那麼它就被認爲是一個生產應用程序。
若是這不適用於您(例如,若是您在容器中運行您的應用程序),請考慮排除devtools或設置-Dspring.devtools.restart.enabled=false 系統屬性。
Spring Boot支持的一些庫使用緩存來提升性能。例如,模板引擎緩存已編譯的模板,以免重複解析模板文件。此外,在提供靜態資源時,Spring MVC能夠在響應中添加HTTP緩存頭。
緩存在產品使用中頗有好處,但在開發過程當中卻拔苗助長,使你沒法看到本身剛剛在應用程序中所作的更改。 所以,默認狀況下,spring-boot-devtools禁用緩存選項。這樣,你每次做出的修改,都會顯示出來。
緩存選項一般由application.properties
文件中的設置配置。 例如,Thymeleaf提供spring.thymeleaf.cache
屬性。 spring-boot-devtools
模塊不須要手動設置這些屬性,而是在開發時自動應用合理的配置。
由於在開發Spring MVC和Spring WebFlux應用程序時,您須要不少關於web請求的信息,因此開發者工具將爲web日誌組啓用調試日誌。
這將爲你提供傳入請求的相關信息,如正在處理這個請求的handle、響應結果等信息。若是但願記錄全部請求細節(包括潛在的敏感信息),能夠打開spring.http.log-request-details配置屬性。
若是您不但願應用默認屬性,則能夠在application.properties中將spring.devtools.add-properties設置爲false。
每當classpath路徑下的文件有更改時,使用spring-boot-devtools的應用程序都會自動從新啓動。
在IDE中工做時,這多是一個有用的功能,由於它爲代碼更改提供了很是快速的反饋循環。 默認狀況下,將監視類路徑上指向文件夾的任何條目的更改。 請注意,某些資源(例如靜態資產和視圖模板)不須要從新啓動應用程序。
Spring Boot提供的重啓技術經過使用兩個類加載器來工做。 不變的類(例如,來自第三方jar的類)將被加載到基類加載器中。 您正在積極開發的類將加載到從新啓動類加載器中。 從新啓動應用程序時,將丟棄從新啓動類加載器,並建立一個新的類加載器。 這種方法意味着應用程序的重啓一般比「冷啓動」要快得多,由於基本類加載器已經可用並已填充。
詳細功能待填充。