springboot 學習(二) 如何修改配置文件,以及yaml文件的使用和多套springboot配置


 

繼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 = "classpath:person.properties")  導入對應配置文件

在通過spring表達式,${}獲取對應配置文件里的值

@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 #配置環境的名稱

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM