【spring boot2】第2篇:配置文件YAML语法
YAML基本語法
- 使用縮進(jìn)表示層級關(guān)系
- 縮進(jìn)時(shí)不允許使用 tab 鍵,只允許使用空格
- 縮進(jìn)的空格數(shù)目不重要,只要相同層級的元素左側(cè)對齊即可
- 大小寫敏感
- 語法參考文檔
YAML支持的數(shù)據(jù)結(jié)構(gòu)
-
對象(屬性和值)、Map(鍵值對):鍵值對的集合
- 對象的一組鍵值對,使用冒號分隔。username: admin
-
冒號后面跟空格來分開鍵和值
person:name: kateage: 20 -
數(shù)組(List、Set):一組按次序排列的值
-
以 - 開頭的行,構(gòu)成一個(gè)數(shù)組
scores:- 21- 23- 24 -
字面量:單個(gè)的、不可再分的值
- 數(shù)字、布爾、日期
-
字符串
1. 默認(rèn)不使用引號 2. 可以使用單引號或者雙引號,單引號會轉(zhuǎn)義特殊字符例如:name: "123 \n lisi";則輸出: 123 換行 lisi 3. 字符串可以寫成多行,從第二行開始,必須有一個(gè)單空格縮進(jìn),換行符會被轉(zhuǎn)為空格例如:name: '123 \n lisi';則輸出:123 \n lisi -
復(fù)合類型數(shù)據(jù)
person:name: helloage: 18birth: 2017/12/12maps:school: aaclass: bblists:‐ lisi‐ zhaoliudog:name: 小狗 age: 12
程序中使用YAML
通過yaml文件實(shí)例化bean
(1) application.yaml文件
person:age: 18birth: 2017/12/12maps:school: aaclass: bblists:- lisi- zhaoliuname: hello(2) 實(shí)體類:Person.java
@Data @Component @ConfigurationProperties(prefix = "person") public class Person {private String name;private Integer age;private String birth;private Map<String, String> maps;private List<String> lists; }(1)@ConfigurationProperties 作用是告訴 spring boot 將該注解標(biāo)注的類的屬性和配置文件中相關(guān)配置綁定。prefix = "person" 的作用是配置文件中的那個(gè)配置映射。使用該注解的前提條件是容器中已經(jīng)注入了@ConfigurationProperties注解標(biāo)注的類;@ConfigurationProperties 默認(rèn)從全局配置文件中獲取配置。
(2)@PropertySource、@ImportResource 于@ConfigurationProperties 有何區(qū)別?
- @PropertySource : 加載類路徑下指定的配置文件,如:@PropertySource(value = "classpath:db.properties")
- @ImportResource : 導(dǎo)入spring的配置文件,讓配置文件里面的內(nèi)容生效,如:@ImportResource(locations={"classpath:spring-beans.xml"})標(biāo)注在spring boot住配置類上
(3) spring boot單元測試
@RunWith(SpringRunner.class) @org.springframework.boot.test.context.SpringBootTest public class SpringBootTest {@Autowiredprivate Person person;@Testpublic void testPerson() {System.out.println(person);} }(4) YAML配置文件處理器
導(dǎo)入配置文件處理器依賴,配置文件進(jìn)行綁定就會有提示
引入后的效果是在 .yaml文件中可看到:
配置文件的加載位置
springboot 啟動會掃描以下位置的 application.properties 或者 application.yml文件作為spring boot的默認(rèn)配置文件:
- /Users/shifeifei03/Documents/Project/my-project/spring-boot/config/
- /Users/shifeifei03/Documents/Project/my-project/spring-boot/
- /Users/shifeifei03/Documents/Project/my-project/spring-boot/spring-boot-helloword/src/main/resources/config/config/
- /Users/shifeifei03/Documents/Project/my-project/spring-boot/spring-boot-helloword/src/main/resources/
優(yōu)先級由高到底,高優(yōu)先級的配置會覆蓋低優(yōu)先級的配置。
自動配置原理
- springBoot 啟動加載主配置類時(shí),利用 @EnableAutoConfiguration 開啟了自動配置功能
-
@EnableAutoConfiguration 注解的作用
- 利用 AutoConfigurationImportSelector 組件選擇器給容器中導(dǎo)入諸多組件,查看源碼可知:主要是利用了該組件選擇器的 String[] selectImports(AnnotationMetadata annotationMetadata) 方法:
- HttpEncodingAutoConfiguration 為例來看看自動配置過程
@Conditional派生注解的了解
spring中@Conditional中的作用是滿足某一個(gè)特定條件創(chuàng)建時(shí)給容器中添加一個(gè)特定的 bean
| @ConditionalOnJava | 系統(tǒng)的java版本是否符合要求 |
| @ConditionalOnBean | 容器中存在指定Bean |
| @ConditionalOnMissingBean | 容器中不存在指定Bean |
| @ConditionalOnExpression | 滿足SpEL表達(dá)式指定 |
| @ConditionalOnClass | 系統(tǒng)中有指定的類 |
| @ConditionalOnMissingClass | 系統(tǒng)中沒有指定的類 |
| @ConditionalOnSingleCandidate | 容器中只有一個(gè)指定的Bean,或者這個(gè)Bean是首選Bean |
| @ConditionalOnProperty | 系統(tǒng)中指定的屬性是否有指定的值 |
| @ConditionalOnResource | 類路徑下是否存在指定資源文件 |
| @ConditionalOnWebApplication | 當(dāng)前是web環(huán)境 |
| @ConditionalOnNotWebApplication | 當(dāng)前不是web環(huán)境 |
| @ConditionalOnJndi | JNDI存在指定項(xiàng) |
spring boot 自動配置精髓
- spring boot啟動會加載大量的自動配置類
- 可以從spring boot自動配置類中找到我們需要使用的功能
- 給容器中自動配置類添加組件的時(shí)候,會從properties類中獲取某些屬性。我們就可以在application.properties配置文件中指定這些屬性的值,覆蓋配置類中的默認(rèn)值
-
記住:
- xxxxAutoConfigurartion : 自動配置類,給容器中添加組件
- xxxxProperties : 封裝配置文件中相關(guān)屬性
- spring boot屬性配置項(xiàng)參考
總結(jié)
以上是生活随笔為你收集整理的【spring boot2】第2篇:配置文件YAML语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度剖析Zabbix Web scena
- 下一篇: 第十一周编程总结--助教