一:配置
修改配置
配置文件的作用:修改Spring Boot 自動配置的默認值蓄诽;Spring Boot在底層都給我們配置好了椒拗;
YAML :是一個標記語言磕昼;
標記語言:
以前的配置文件俺驶,大多數(shù)都使用的是XXXX.xml文件形式介汹;
YAML:以數(shù)據(jù)為中心纤房,比json纵隔,xml 等更適合做配置文件;
這里試了下application.propetries與applicaiton.yml的優(yōu)先級:結(jié)果顯示同時存在時優(yōu)先讀properties文件炮姨;
YAML語法:
編寫配置文件導入spring-boot-configuration-processor:作用:動態(tài)獲取配置文件值巨朦,編寫時給出提示;
<dependency>
? ? ? ?<groupId>org.springframework.boot</groupId>
????????<artifactId>spring-boot-configuration-processor</artifactId>
????????<optional>true</optional>
</dependency>
需要批量指定時使用@ConfigurationProperties(prefix ="person")? ?其中person是批量的對象名
需要單個值使用@Value("${name}") 其中name? 是配置中的鍵
另外還有兩個導入配置的注解:
? ? ? ?@PropertySource:加載指定的配置文件里的配置剑令;
? ? ? ? @ImportSource : 導入spring的配置文件使spring的配置文件生效糊啡;
激活指定的profiles
命令行激活:
????可以在傳入?yún)?shù)
去除上圖配置,如下這種也可以指定通過profiles指定
jvm指定配置文件:
配置同時存在時
說明命令行優(yōu)先級>jvm優(yōu)先級
外部配置加載順序:
Spring Boot加載配置:優(yōu)先級從高到低吁津,高優(yōu)先級的配置覆蓋低優(yōu)先級的配置棚蓄,u所有的配置會形成互補配置
#設(shè)置項目訪問地址--.servlet新版本配置
server.servlet.context-path=/boot01
命令行參數(shù):多個配置使用空格分開--開頭
當.properties中配置server.servlet.context-path=/boot02,碍脏,命令行啟動使用/boot01是會是什么效果呢? 拭目以待~
答案是命令行配置優(yōu)先級大于.properties中的配置優(yōu)先級
自動配置原理
配置文件到底能寫什么? 怎么寫? 自動配置原理:
自動配置原理:
1).? ? Spring Boot啟動的時候加載主配置類梭依,通過@EnableAutoConfiguration子注解開啟自動配置功能
2).????EnableAutoConfiguration作用:?
? ? 2.1).通過spring源注解@Import({AutoConfigurationImportSelector.class}) 導入AutoConfigurationImportSelector為容器加載組件;? 那是怎么做到的呢?
1.利用selectImports方法
2.通過List configurations =this.getCandidateConfigurations(annotationMetadata, attributes);獲取候選配置
3.SpringFactoriesLoader.loadFactoryNames 中的this.getSpringFactoriesLoaderFactoryClass()方法獲取EnableAutoConfiguration.class
this.getBeanClassLoader()獲取加載器
通過loadFactoryNames 中的loadSpringFactories() 得到預選配置的路徑META-INF下的spring.factories,之后會掃描jar包下META-INF下的spring.factories 典尾,然后通過傳進來的加載器咔咔加載預選配置到spring容器
把掃描到的這些文件內(nèi)容包裝成properties對象役拴,然后從properties中獲取到EnableAutoConfiguration.class類對應(yīng)得值,然后把他們加載到容器中
將類路徑下META-INF/spring.factories里面的配置的所有EnableAutoConfiguration的值加入到容器中;
每一個這樣的xxxAutoConfiguration類都是容器中的組件,都加入到容器中钾埂;用他們來做自動化配置河闰;
以其中一個配置類為例解釋自動配置原理:
精髓:
1). Spring Boot 啟動會加載大量的自動配置類
2). 我們看我們需要的功能有沒有Spring? Boot 默認寫好的自動配置類
3). 我們再來看這個自動配置類中到底配置里那些組件;(只有我們要用的組件有姜性,我們就不想需要再來配置了)
4). 給容器中自動配置類添加組件的時候瞪慧,會從properties類中獲取厚些屬性。我們就可以在配置文件中指定這些屬性的值
xxxxAutoConfiguration:自動配置類部念,給容器加載組件
xxxxProperties:封裝配置文件中相關(guān)屬性弃酌;