一、前言
SpringBoot 使用一個全局的配置文件,配置文件名固定的;
·application.properties
·application.yml
配置文件的作用:修改SpringBoot自動配置的默認值;SpringBoot在底層都給我們自動配置好;
YAML(YAML Ain't Markup Language)
YAML A Markup Language:是一個標記語言
YAML isn't Markup Language:不是一個標記語言;
標記語言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以數據為中心,比json、xml等更適合做配置文件;
二、YAML語法
?
?2.1基本語法
k:(空格)v: 表示一對鍵值對(空格必須有);
以空格的縮進來控制層級關系;只要是左對齊的一列數據,都是同一層級的
屬性和值也是大小寫敏感?
2.2 值的寫法
字面量: 普通的值(數字,字符串,布爾)
k: v: 字面直接來寫
字符串默認不用加上單引號或者雙引號
"":雙引號,會轉義字符串里面的特殊字符;特殊字符會作為本身想表示的意思
name: "zhangsan \n lisi": 輸出; zhangsan 換行 lisi
'':單引號;不會轉義特殊字符,特殊字符最終只是一個普通的字符串數據
name:' zhangsan \n lisi': 輸出; zhangsan \n lisi?
2.3 對象、數組、Map(屬性和值)(鍵值對)
?
在下一行來寫對象的屬性和值的關系;注意縮進
對象:(還是k: v的方式)
行內寫法 (注意空格)
數組:
?
?
Map :
三、配置文件值注入?
3.1 使用@ConfigurationProperties將值注入到屬性中
application.yml配置文件的內容:
server:port: 8082Person:last_name: "xiaobai \n xxx"age: 21birth: 2025/09/22boss: falsemaps: {k1: shuai,k2: ku}lists:-lisi-zhaoliudog: {name: Snax,age: 12}
?
javaBean:
我們可以導入配置文件處理器,以后編寫配置就有提示了
<!‐‐導入配置文件處理器,配置文件進行綁定就會有提示‐‐>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional>
</dependency>
我們編寫一個測試類,?
@Autowiredprivate Person person;@Testpublic void TestPerson(){System.out.println(person);}
?發現yml里面配置的內容給到了Person類的屬性了
3.2 @Value獲取值和@ConfigurationProperties獲取值比較
3.2.1松散綁定:
?
通過@ConfigurationProperties方法注入值
Person類里的LastName屬性 和yml文件中的名字不一樣,照樣能夠注入成功
但是@Value注解必須要精準匹配yml里的鍵值,才能注入值
?
3.2.2? SpEL表達式
@Value支持計算表達式
?
但是@ConfigurationProperties不支持?
3.2.3 數據校驗
我們可以新加一個email屬性,并對email屬性進行依次數據校驗
給email 賦值
分別用這兩種注入方式查看結果:
?
@ConfigurationProperties報錯了,說明支持數據校驗
@Value 直接打印了結果,說明它根本沒有數據校驗這回事
?
3.2.4 復雜類型封裝
復雜類型指的是 Map、對象等類型
我們是直接在yml文件里賦值的,@Vaue無法干這件事
?
3.2.3 ?@PropertySource @ImportResource @Bean
@PropertySource: 加載指定的配置文件
?
person.properties文件中的內容:
person.lastName=張三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15
運行一下:
說明person.properties文件里的相應值注入了Person里的屬性中?
@ImportResource
導入Spring的配置文件,讓配置文件里面的內容生效;
Spring Boot里面沒有Spring的配置文件,我們自己編寫的配置文件,也不能自動識別;
想讓Spring的配置文件生效,加載進來;@ImportResource標注在一個配置類上
?在主程序中引入注解,使Bean.xml生效
配置一下Bean.xml吧
我們引入了alibaba中的Druid連接池?
此時我們去測試類里測試,連接池是否引入成功?
?
發現引入成功
還有一種方法,我們在Spring框架中想引入一個配置文件是這樣引入的
@org.junit.Testpublic void test() {ApplicationContext context = new AnnotationConfigApplicationContext(UserProxy.class);UserService userService = (UserService) context.getBean("userserviceimpl");userService.save();}
?
在這里我們用同樣的思路驗證是否引入了druid連接池
驗證:?
引入成功!?
ok,今天小編就分享到這里,希望對你的學習有所幫助哦