1. 程式人生 > >Spring Boot配置檔案和常見操作

Spring Boot配置檔案和常見操作

Spring Boot配置檔案和常見操作

Spring Boot專案釋出成jar包

在這裡插入圖片描述
在idea中通過maven構建Spring Boot專案,可直接使用maven的打包功能進行釋出,
在maven project選項卡中執行package即可打包


Spring Boot配置方式

每個starter都有自己預設的配置,如果需要改變預設值,可以在其他地方配置來覆蓋掉預設的值,覆蓋預設的配置有多種方式,每種方式的優先順序也不同,如果在多個地方配置則優先使用優先順序高的值,其中命令列引數優先順序最高, 其中大部分引數一般都配置在屬性檔案application.properties中,屬性檔案即可以覆蓋starter中預設的值,也可以自定義值

  1. 在命令列行輸入的引數
  2. SPRING_APPLICATION_JSON中的屬性。SPRING_APPLICATION_JSON是以json格式配置在系統環境變數中的內容
  3. java:comp/env 裡的 JNDI 屬性
  4. Java的系統屬性,可以通過System.getProperties()獲得的內容
  5. 作業系統環境變數
  6. RandomValuePropertySource屬性類生成的random.*屬性
  7. 位於當前應用jar包之外,針對不同的profile換將的配置檔案內容,例如application-{profile}.properties或者yaml定義的配置檔案
  8. 位於當前應用jar包之內,針對不同的profile換將的配置檔案內容,例如application-{profile}.properties或者yaml定義的配置檔案
  9. 位於當前應用jar包之外的application.properties和yaml配置內容
  10. 位於當前應用jar包之內的application.properties和yaml配置內容
  11. 在應用@Configuration配置類中,用@PropertySource註解宣告的屬性檔案
  12. 應用預設屬性,SpringApplication.setDefaultProperties宣告的預設屬性

命令列方式

# 通過使用--server.port屬性來設定xxx.jar應用的埠為80 
# --debug啟動除錯模式,會列印更多日誌
java -jar xxx.jar --server.port=80 --debug

應用程式屬性檔案: application.properties

starter中的配置

#debug模式啟動
debug=false

#服務埠80
server.port=80

自定義屬性

#自定義屬性
default.name=xubo
default.age=22
default.result=姓名${default.name},年齡${default.age}

在配置檔案中,可以通過${key}來相互引用,key可以在當前屬性檔案中也可以在其他屬性檔案中。
注意:application.properties 配置中文值的時候,讀取出來的屬性值會出現亂碼問題。
但是application.yml不會出現亂碼問題。原因是,Spring Boot 是以iso-8859的編碼方式讀取 application.properties配置檔案。

Spring可以通過註解@Value(“${屬性名}”)來載入對應的配置屬性,然後將屬性值賦值給註解對應的實體屬性

    @Value("${default.name}")
    private String name;
    @Value("${default.age}")
    private Integer age;

在配置檔案中也可以通過random.*來呼叫RandomValuePropertySource#getRandomValue(String type)方法來隨機生成一個值,注意:隨機的key不能以random開頭,如random.a是不允許的

#隨機生成int
default.id=${random.int}
#生成10以內的隨機數
default.random1=${random.int(10)}
#生成10-20的隨機數
default.random2=${random.int[10,20]}
#隨機生成long
default.long=${random.long}
#生成隨機字串
default.str=${random.value}
#生成uuid
default.uuid=${random.uuid}

@ConfigurationProperties(prefix = “xxx”): 配置屬性註解,可以指定一個屬性的字首,將配置檔案中的key為prefix.屬性名的值賦值給對應的屬性,這種方式適用於字首相同的一組值,這樣就不用再為每個屬性配置@Value(“${prefix.field}”)

@Component
@ConfigurationProperties(prefix = "default")
public class RandomProperties {

    private Integer id;
    private Integer random1;
    private Integer random2;
    private String str;
    private String uuid;
}

自定義配置檔案

@Component
@PropertySource("classpath:default.properties")
public class Users {

    @Value("${default.id}")
    private Integer id;
    @Value("${default.name}")
    private String name;
    @Value("${default.age}")
    private Integer age;
}

application.properties雖然也可以定義非starter中的配置,即定義自己的配置,如果把自己的配置也放到這個檔案中可能會使得檔案很臃腫,可以將自己的配置放在其他屬性檔案中,這樣配置更加集中
在resources中的根目錄建立一個default.properties檔案
使用@PropertySource來定義屬性檔案的位置


環境切換
專案中經常有一些引數環境的不同而配置不同的值,如開發環境的資料庫配置資訊和生產環境的資料庫配置資訊是不同的,為了了方便環境之間的簡單的切換,可以通過profile來實現, Spring Boot中多環境配置檔名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境標識,比如:

  • application-dev.properties:開發環境
  • application-test.properties:測試環境
  • application-prod.properties:生產環境

至於哪個具體的配置檔案會被載入,需要在application.properties檔案中通過spring.profiles.active屬性來設定,其值對應{profile}值
如:spring.profiles.active=test1就會載入application-test1.properties配置檔案內容
java -jar xxx.jar --spring.profiles.active=test1


參考文獻

Spring Boot入門教程(四):配置檔案