日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【spring boot2】第2篇:配置文件YAML语法

發(fā)布時(shí)間:2025/7/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【spring boot2】第2篇:配置文件YAML语法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)行綁定就會有提示

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId> </dependency>

引入后的效果是在 .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 為例來看看自動配置過程
//標(biāo)注一個(gè)配置類 @Configuration /***spring boot啟動動指定類的ConfigurationProperties功能;將配置文件中對應(yīng)的值和*HttpProperties綁定起來;并把HttpProperties加入到容器中*/ @EnableConfigurationProperties(HttpProperties.class) /***如果滿足指定的條件,整個(gè)配置類里面的配置就會生效; 判斷當(dāng)前應(yīng)用是否是web應(yīng)用?如果是,當(dāng)前配置 *類生效*/ @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) //判斷當(dāng)前應(yīng)用中有沒有haracterEncodingFilter這個(gè)類,有則配置生效 @ConditionalOnClass(CharacterEncodingFilter.class) @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true) public class HttpEncodingAutoConfiguration {/*** HttpProperties 和 spring boot 的配置文件映射了,原因是:HttpProperties 被 * @ConfigurationProperties 注解標(biāo)注* @ConfigurationProperties(prefix = "spring.http")* public class HttpProperties {}*/private final HttpProperties.Encoding properties;public HttpEncodingAutoConfiguration(HttpProperties properties) {this.properties = properties.getEncoding();}//給容器中添加一個(gè)組件,組件的某些值需要從properties文件中獲取@Bean@ConditionalOnMissingBeanpublic CharacterEncodingFilter characterEncodingFilter() {CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();filter.setEncoding(this.properties.getCharset().name());filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));return filter;}@Beanpublic LocaleCharsetMappingsCustomizer localeCharsetMappingsCustomizer() {return new LocaleCharsetMappingsCustomizer(this.properties);} }

@Conditional派生注解的了解

spring中@Conditional中的作用是滿足某一個(gè)特定條件創(chuàng)建時(shí)給容器中添加一個(gè)特定的 bean

@Conditional擴(kuò)展注解作用(判斷是否滿足當(dāng)前指定條件)
@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)境
@ConditionalOnJndiJNDI存在指定項(xiàng)

spring boot 自動配置精髓

  • spring boot啟動會加載大量的自動配置類
  • 可以從spring boot自動配置類中找到我們需要使用的功能
  • 給容器中自動配置類添加組件的時(shí)候,會從properties類中獲取某些屬性。我們就可以在application.properties配置文件中指定這些屬性的值,覆蓋配置類中的默認(rèn)值
  • 記住:

    • xxxxAutoConfigurartion : 自動配置類,給容器中添加組件
    • xxxxProperties : 封裝配置文件中相關(guān)屬性
  • spring boot屬性配置項(xiàng)參考
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的【spring boot2】第2篇:配置文件YAML语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。