1.內部配置加載順序:
加載規則
- 加載順序和優先級與配置文件所在路徑有關
- 優先級高的配置會覆蓋優先級低的配置,配置文件會全部加載,遇到相同的配置高優先級覆蓋低優先級
- 命令行參數 -spring.config.location 自定義配置文件路徑,可以與項目現有配置共存
優先級從高到低為
- /config
- /(根目錄)
- classpath:/config
- classpath:/
2.外部配置加載順序
相同配置高優先級覆蓋低優先級,不同配置互補,優先級從高到低為
- 命令行參數
- jar包 外部的application.props/yml 帶有spring.profile
- jar包 內部的application.props/yml 帶有spring.profile
- jar包 外部的application.props/yml 不帶有spring.profile
- jar包 內部的application.props/yml 不帶有spring.profile
3.自動配置
- META/INF/spring.factories中EnableAutoConfiguration對應的所有類(自動配置類)加載到容器中,用它們來做自動配置
- 每個加載進來的配置類上的@EnableConfigurationProperties注解用來啟用指定類的ConfigurationProperties功能,從配置文件獲取指定的值和屬性進行綁定
- @ConditionalOnWebApplication 判斷如果是web應用則生效,否則不生效
- @ConditionalOnClass 判斷當前項目是否有某個類
- @ConditionalOnProperty 判斷配置文件是否有某個配置
總之注解根據不同條件判斷,決定這個配置類是否生效
4 關于日志
4.1 常見框架(接口和實現)
- 常見抽象層接口:jcl(commons-logging) slf4j jboss-logging
- 常見日志實現:log4j logback jul(java.util.logging) log4j2
- springboot的默認選擇日志組合 slf4j + logback
4.2 SpringBoot的日志配置
logging.file=spring.log
- 不指定路徑就在當前項目下生成spring。log文件logging.path=/spring/boot
- 磁盤根路徑下創建 /spring/boot/spring.log日志文件,spring.log是默認文件名logging.pattern.console=
logging.pattern.file=
- 設置日志輸出格式
4.3 日志配置文件放在類路徑下可以使用自定義的日志
-
logback :
logback.xml logback-spring.xml
-
log4j2 :
log4j2.xml log4j2-spring.xml
-
jul:
logging.properties
不帶`-spring`后綴的,直接被日志框架識別 帶后綴的不被日志框架加載,而由spring boot加載,可是使用spring profile功能,指定某個配置在某個環境生效
5 Profile
5.1 多配置文件
application-{profile}.properties
5.2 yml文檔塊
---
在yml 中可以充當文檔塊將多個文檔分割,每一塊用不同的配置
5.3 激活指定的profile
配置文件指定
spring.profiles.active=dev命令行參數
--spring.profiles.active=dev虛擬機參數
-Dspring.profiles.active=dev
6 SpringBoot的啟動原理 運行流程 自動配置原理
啟動原理
-
創建SpringApplication對象
1.掃描類路徑下META-INF/spring.factories文件尋找org.springframework.context.ApplicationContextInitializer
對應的類,并保存起來2.掃描類路徑下META-INF/spring.factories文件尋找org.springframework.context.ApplicationListener對應的類
并保存3.判斷傳入的配置類,哪一個有主方法,哪個就是主配置類(SpringBoot配置類在啟動時可以傳多個)
-
運行run方法
1.獲取SpringApplicationRunListeners :掃描類路徑下META-INF/spring.factories文件尋找org.springframework.boot.SpringApplicationRunListener并逐個調用starting方法
2.使用ApplicationArguments封裝命令行參數
3.創建和配置環境
4.創建和配置環境完成后SpringApplicationRunListeners逐個調用envermentPrepared方法,環境準備完成
5.打印banner圖標
6.創建IOC容器,會判斷是創建web的容器還是普通類型的容器
7.準備上下文環境
8.回調之前保存的所有ApplicationContextInitializer對象的initialize方法
9.回調所有SpringApplicationRunListener的contextPrepared方法
10.所有配置都完成后,回調所有SpringApplicationRunListener的contextLoaded方法, 然后刷新IOC容器(掃描配置文件配置類,創建對象等。如果是web應用還會創建嵌入式的tomcat)
11.從容器中獲取所有的ApplicationRunner和CommandLineRunner進行回調
12.回調所有SpringApplicationRunListener的finish方法,啟動完成