繼springboot 學習(一) 接下來將如何修改springboot配置文件,這個文件配置可以修改各個類的屬性值,前提是這個類有這個注解@ConfigurationProperties
這個配置文件名稱固定,但可以使用兩種格式:application.yaml,application.properties
配置文件所在可以在如下幾個位置:來自官方的圖
1 表示的是項目路徑下得config目錄
2 項目路徑
3 表示資源文件下的config目錄
4 表示資源目錄下
可以在以上各個路徑下都配置application.properties文件,但是有優先級,優先級分別是1>2>3>4
拓展,運維小技巧
指定位置加載配置文件
我們還可以通過spring.config.location來改變默認的配置文件位置
項目打包好以后,我們可以使用命令行參數的形式,啟動項目的時候來指定配置文件的新位置;這種情況,一般是后期運維做的多,相同配置,外部指定的配置文件優先級最高
java -jar spring-boot-config.jar --spring.config.location=F:/application.properties
yaml文件的使用:
兩種格式的語法:
-
application.properties
-
語法結構 :key=value
-
application.yml
-
語法結構 :key:空格 value
官網強烈推薦yaml格式
何為yaml?
yaml是以數據作為中心的,一種記錄數據的標記語言
yaml的基礎語法:聲明:語法要求嚴格!
- 空格不能省略
- 以縮進來控制層級關系,只要是左邊對齊的一列數據都是同一個層級的。
- 屬性和值的大小寫都是十分敏感的。
1,基本數據類型及string K: V形式
value的值可以直接寫, 字符串默認不用加上雙引號或者單引號;
name: 黃易安
age: 27
注意:
-
“ ” 雙引號,不會轉義字符串里面的特殊字符 , 特殊字符會作為本身想表示的意思;
比如 :name: "kuang \n shen" 輸出 :kuang 換行 shen
-
'' 單引號,會轉義特殊字符 , 特殊字符最終會變成和普通字符一樣輸出
比如 :name: ‘kuang \n shen’ 輸出 :kuang \n shen
2,map類型的
maps: {k1: v1,k2: v2}
#或者
maps:
k1: v1
k2: v2
3,數組類型的
list:
- code
- music
- girl
#或者
list:[code,music,girl]
4,對象類型,類名及其屬性
dog:
name: 旺財
age: 3
yaml文件可以直接向實體類注入值:使用注解@ConfigurationProperties ,后面跟的"people"即下面的yaml文件的k值
對應實體類創建:
@Component
@Data
@ConfigurationProperties("people")
public class people {
private String name;
private Integer age;
private Dog dog;
private boolean happy;
private Date birth;
private Map<Object,Object> maps;
private List<Object> list;
}
對應yaml:
people:
name: 黃易安
age: 27
dog:
name: 旺財
age: 3
happy: true
birth: 2021/09/07
maps: {k1: v1,k2: v2}
list:
- code
- music
- girl
當使用properties時,也可以導入值,但比較麻煩,方法如下:
使用注解:@PropertySource(value =
@PropertySource(value = "classpath:person.properties")
@Component
public class Person {
@Value("${name}")
private String name;
......
}
這種方法需要一個一個匹配,不能像yaml一樣,全部匹配~
yaml可以使用spring表達式,如下,當然了@value也可以使用
person:
name: qinjiang${random.uuid} # 隨機uuid
age: ${random.int} # 隨機int
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: ${person.hello:other}_旺財
age: 1
兩者對比:
1,configurationproperties可以自己匹配,但當K值和pojo類的屬性不一致時,pojo的類屬性值會為null
2,松散綁定,駝峰轉換,pojo類里 userName,yaml里 user-name ,會自動轉換,匹配成功
3,spel,即${}
4, 303校驗,可以在類上使用@Validated開啟校驗,並通過對應例如,郵箱格式檢查@Email在屬性注解,進行校驗,如下:
@Component
@Validated
@ConfigurationProperties("people")
public class people {
@Email
private String name;
private Integer age;
private Dog dog;
private boolean happy;
private Date birth;
private Map<Object,Object> maps;
private List<Object> list;
}
結果如下:
各種檢查的注解如下:
@NotNull(message="名字不能為空")
private String userName;
@Max(value=120,message="年齡最大不能查過120")
private int age;
@Email(message="郵箱格式錯誤")
private String email;
空檢查
@Null 驗證對象是否為null
@NotNull 驗證對象是否不為null, 無法查檢長度為0的字符串
@NotBlank 檢查約束字符串是不是Null還有被Trim的長度是否大於0,只對字符串,且會去掉前后空格.
@NotEmpty 檢查約束元素是否為NULL或者是EMPTY.
Booelan檢查
@AssertTrue 驗證 Boolean 對象是否為 true
@AssertFalse 驗證 Boolean 對象是否為 false
長度檢查
@Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內
@Length(min=, max=) string is between min and max included.
日期檢查
@Past 驗證 Date 和 Calendar 對象是否在當前時間之前
@Future 驗證 Date 和 Calendar 對象是否在當前時間之后
@Pattern 驗證 String 對象是否符合正則表達式的規則
.......等等
除此以外,我們還可以自定義一些數據校驗規則
配置多套環境:
我們在主配置文件編寫的時候,文件名可以是 application-{profile}.properties/yml , 用來指定多個環境版本,如下
配置兩套環境,分別是dev測試,prod生產
如何使用呢,如下:
---這是分割線,表示在同一個yanl中,可以進行多個配置,
server: port: 8081 #選擇要激活那個環境塊 spring: profiles: active: prod --- server: port: 8083 spring: profiles: dev #配置環境的名稱 --- server: port: 8084 spring: profiles: prod #配置環境的名稱