Maven的用戶能夠經過繼承spring-boot-starter-parent項目來得到一些合理的默認配置。這個parent提供瞭如下特性:java
啓動器包含一些相應的依賴項, 以及自動配置等.mysql
Spring Boot 支持基於Java的配置, 儘管能夠將 SpringApplication 與 xml 一塊兒使用, 可是仍是建議使用 @Configuration.spring
能夠經過 @Import 註解導入其餘配置類, 也能夠經過 @ImportResource 註解加載XML配置文件.sql
Spring Boot 自動配置嘗試根據您添加的jar依賴項自動配置Spring應用程序. 例如, 若是項目中引入 HSQLDB jar, 而且沒有手動配置任何數據庫鏈接的bean, 則Spring Boot會自動配置內存數據庫.數據庫
您須要將 @EnableAutoConfiguration 或 @SpringBootApplication 其中一個註解添加到您的 @Configuration 類中, 從而選擇進入自動配置.
import org.springframework.boot.autoconfigure.*; import org.springframework.boot.autoconfigure.jdbc.*; import org.springframework.context.annotation.*; @Configuration @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class MyConfiguration { }
若是該類不在classpath中, 你可使用該註解的excludeName屬性, 並指定全限定名來達到相同效果. 最後, 你能夠經過 spring.autoconfigure.exclude
屬性 exclude 多個自動配置項(一個自動配置項集合)數組
SpringBoot在寫啓動類的時候若是不使用 @ComponentScan
指明對象掃描範圍, 默認指掃描當前啓動類所在的包裏的對象.緩存
@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters={@ComponentScan.Filter(type=CUSTOM,classes=TypeExcludeFilter.class),}) public @interface SpringBootApplication
使用 @SpringBootApplication
註解至關於使用了下面三個註解.app
@EnableAutoConfiguration
: 啓用 Spring Boot 的自動配置.@ComponentScan
: 對應用程序所在的包啓用 @Component 掃描.@Configuration
: 容許在上下文中註冊額外的bean或導入其餘配置類.dom
應用服務啓動時,加載一些數據和執行一些應用的初始化動做。如:刪除臨時文件,清除緩存信息,讀取配置文件信息,數據庫鏈接等。maven
一、SpringBoot提供了CommandLineRunner接口。當有該接口多個實現類時,提供了@order註解實現自定義執行順序,也能夠實現Ordered接口來自定義順序。
注意:數字越小,優先級越高,也就是@Order(1)註解的類會在@Order(2)註解的類以前執行。
import com.example.studySpringBoot.service.MyMethorClassService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(value=1) public class SpringDataInit implements CommandLineRunner { @Autowired private MyMethorClassService myMethorClassService; @Override public void run(String... strings) throws Exception { int result = myMethorClassService.add(8, 56); System.out.println("----------SpringDataInit1---------"+result); } }
二、SpringBoot提供的ApplicationRunner接口也能夠知足該業務場景。不一樣點:ApplicationRunner中run方法的參數爲ApplicationArguments,而CommandLineRunner接口中run方法的參數爲String數組。想要更詳細地獲取命令行參數,那就使用ApplicationRunner接口
import com.example.studySpringBoot.service.MyMethorClassService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.Ordered; import org.springframework.stereotype.Component; @Component public class SpringDataInit3 implements ApplicationRunner,Ordered { @Autowired private MyMethorClassService myMethorClassService; @Override public void run(ApplicationArguments applicationArguments) throws Exception { int result = myMethorClassService.add(10, 82); System.out.println("----------SpringDataInit3---------"+result); } @Override public int getOrder() { return 3; } }
Spring Boot容許你外部化你的配置,這樣你就能夠在不一樣的環境中使用相同的應用程序代碼,你可使用 properties
文件、YAML文件、環境變量和命令行參數來外部化配置,屬性值能夠經過使用 @Value
註解直接注入到你的bean中,經過Spring的 Environment
抽象訪問,或者經過 @ConfigurationProperties
綁定到結構化對象。
@ConfigurationProperties("spring.datasource.username")
Spring Boot使用一種很是特殊的 PropertySource
命令, 該命令旨在容許對值進行合理的覆蓋, 屬性按如下順序考慮:
~/.spring-boot-devtools.properties
當devtools處於激活狀態時。@TestPropertySource
註解@SpringBootTest#properties
註解屬性SPRING_APPLICATION_JSON
(嵌入在環境變量或系統屬性中的內聯JSON)的屬性ServletConfig
初始化參數ServletContext
初始化參數java:comp/env
中的JNDI屬性System.getProperties()
)RandomValuePropertySource
application-{profile}.properties
和YAML 變體)application-{profile}.properties
和YAML 變體)application.properties
和YAML 變體)application.properties
和YAML 變體)@PropertySource
註解在你的 @Configuration
類上SpringApplication.setDefaultProperties
指定)在默認狀況下, SpringApplication
會轉換任何命令行選項參數 (也就是說,參數從 --
開始, 像 --server.port=9000
) 到一個 property
, 並將它們添加到Spring Environment
中, 如前所述, 命令行屬性老是優先於其餘屬性源.
若是不但願將命令行屬性添加到 Environment
中, 你可使用 SpringApplication.setAddCommandLineProperties(false)
禁用它們.
SpringApplication
在如下位置從 application.properties
文件加載屬性並將它們添加到Spring Environment
:
/config
/config
包列表按優先順序排序(在列表中較高的位置定義的屬性覆蓋在較低位置定義的屬性).
咱們可能在不一樣環境下使用不一樣的配置, 這些配置有多是在同一個文件中或不一樣文件中.
1.在相同文件中
##################################### Determime which configuration be used spring: profiles: active: "dev" # Mysql connection configuration(share) datasource: platform: "mysql" driverClassName: "com.mysql.cj.jdbc.Driver" max-active: 50 max-idle: 6 min-idle: 2 initial-size: 6 --- ##################################### for dev environment spring: profiles: "dev" datasource: # mysql connection user(dev) username: "root" # mysql connection password(dev) password: "r9DjsniiG;>7" --- ##################################### for product environment spring: profiles: "product" datasource: # mysql connection user(product) username: "root" # mysql connection password(product) password: "root" --- ##################################### for test environment spring: profiles: "test" datasource: # mysql connection user(test) username: "root" # mysql connection password(test) password: "root"
這樣在配置完相同屬性的時, 還能夠對不一樣的環境進行不一樣的配置.
2.多個配置文件.
咱們能夠把特定環境的配置, 放入多個配置文件中, 可是要按照 application-{profile}.properties
格式. 以下圖.
spring.profiles.active
屬性進行設置.
咱們也能夠把配置文件放在 jar 外面, 使用 spring.config.location
屬性進行設置.
java -jar beetltest-0.0.1-SNAPSHOT.jar -spring.config.location=classpath:/application.properties