SpringBoot官方文檔html
配置相關java
SpringBoot使用一個全局的配置文件 , 配置文件名稱是固定的spring
配置文件的做用 :修改SpringBoot自動配置的默認值,由於SpringBoot在底層都給咱們自動配置好了;數組
YAML是 "YAML Ain't a Markup Language" (YAML不是一種置標語言)的遞歸縮寫。springboot
在開發的這種語言時,YAML 的意思實際上是:"Yet Another Markup Language"(還是一種置標語言)app
YAML A Markup Language :是一個標記語言dom
YAML isnot Markup Language :不是一個標記語言spring-boot
標記語言測試
之前的配置文件,大多數都是使用xml來配置;好比一個簡單的端口配置,咱們來對比下yaml和xmlui
yaml配置:
server: prot: 8080
xml配置:
<server> <port>8081<port> </server>
基礎語法:
k:(空格) v
以此來表示一對鍵值對(空格不能省略);以空格的縮進來控制層級關係,只要是左邊對齊的一列數據都是同一個層級的。
注意 :屬性和值的大小寫都是十分敏感的。例子:
server: port: 8081 path: /hello
字面量:普通的值 [ 數字,布爾值,字符串 ]
k: v
字面量直接寫在後面就能夠 , 字符串默認不用加上雙引號或者單引號;
「」 雙引號,不會轉義字符串裏面的特殊字符 , 特殊字符會做爲自己想表示的意思;
好比 : name: "bao\n sq" 輸出 : bao換行 sq
'' 單引號,會轉義特殊字符 , 特殊字符最終會變成和普通字符同樣輸出
好比 : name: ‘bao\n sq’ 輸出 : bao\n sq
對象、Map(鍵值對)
k: v1: v2:
在下一行來寫對象的屬性和值得關係,注意縮進;好比:
student: name: bao age: 3
行內寫法
student: {name: bao,age: 3}
數組( List、set )
用 - 值表示數組中的一個元素,好比:
pets: - cat - dog - pig
行內寫法
pets: [cat,dog,pig]
配置文件中添加,端口號的參數,就能夠切換端口;
server.port=8081
1. 若是要使用properties配置文件可能導入時存在亂碼現象 , 須要在IDEA中進行調整 , 咱們這裏直接使用yml文件 , 將默認的 application.properties後綴修改成yml
2. 導入配置文件處理器
<!--導入配置文件處理器,配置文件進行綁定就會有提示--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
3.編寫yml 配置文件
person: name: bao age: 3 happy: false birth: 2005/01/01 maps: {k1: v1,k2: v2} lists: - code - girl - music dog: name: 旺財 age: 1
4.在SpringBoot的主程序的同級目錄下建包,只有這樣,主程序纔會對這些類生效 ; 咱們建一個pojo的包放入咱們的Person類和Dog類;
package com.bao.springbootdemo03.pojo; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; /* @ConfigurationProperties做用: 將配置文件中配置的每個屬性的值,映射到這個組件中; 告訴SpringBoot將本類中的全部屬性和配置文件中相關的配置進行綁定 參數 prefix = 「person」 : 將配置文件中的person下面的全部屬性一一對應 只有這個組件是容器中的組件,才能使用容器提供的@ConfigurationProperties功能 */ @Component //註冊bean @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; //get,set方法 //toString方法 }
記得寫上 toString()方法,方便調試輸出結果
package com.kuang.springbootdemo03.pojo; public class Dog { private String name; private Integer age; //get、set方法 //toString()方法 }
5.確認無誤後,到測試單元中進行測試,看是否注入成功!
@RunWith(SpringRunner.class) @SpringBootTest public class SpringbootDemo03ApplicationTests { @Autowired Person person ; @Test public void contextLoads() { System.out.println(person); } }
spring-boot中能夠用@validated來校驗數據,若是數據異常則會統一拋出異常,方便異常中心統一處理。咱們這裏來寫個註解讓咱們的name只能支持Email格式
@Component //註冊bean @ConfigurationProperties(prefix = "person") @Validated //數據校驗 public class Person { //@Value("${person.name}") @Email //name必須是郵箱格式 private String name; }
運行結果
會報郵箱格式的錯誤
使用數據校驗,能夠保證數據的正確性;
1. @PropertySource :加載指定的配置文件;使用@configurationProperties默認從全局配置文件中獲取值;
咱們去在resources目錄下新建一個person.properties文件
name=baobao
而後在咱們的代碼中指定加載person.properties文件
@PropertySource(value = "classpath:person.properties") @Component //註冊bean public class Person { @Value("${name}") private String name; ...... }
隨機數
${random.value}、${random.int}、${random.long}、${random.int(10)}等等
佔位符引用其餘屬性的值,若是不存在能夠設置默認值
person: name: bao${random.uuid} age: ${random.int} happy: false birth: 2010/02/01 maps: {k1: v1,k2: v2} lists: - code - girl - music dog: name: ${person.hello:hello}_狗子 age: 1