在之前的項目開發中,我們可以使用xml,properties進行相關的配置,這種配置方式比較簡單,但是在應對復雜的商業需求下,多環境和編程化的配置無法得到滿足,因此springboot為我們提供了YAML的配置方式豐富功能和簡化開發。
1、Properties配置詳解
通常情況下,我們可以使用properties文件進行相關的配置。
(1)在resources目錄下創建application.properties
person.name=zhangsan
person.age=12
person.gender=男
person.desc=my name is ${person.name},my age is ${person.age}
(2)創建對應的實體類對象
@Component
public class Person {
@Value("${person.name}")
private String name;
@Value("${person.age}")
private int age;
private String sex;
@Value("${person.desc}")
private String desc;
public Person() {
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
(3)創建對應的測試類
@SpringBootTest class ConfigApplicationTests { @Autowired Person person; @Test void contextLoads() { System.out.println(person); } }
可以在properties文件中使用隨機數
(1)在application.properties文件中添加如下屬性
my.secret=${random.value} my.number=${random.int} my.bignumber=${random.long} my.uuid=${random.uuid} my.number.less.than.ten=${random.int(10)} my.number.in.range=${random.int[1024,65536]}
@Component public class My { @Value("${my.secret}") private String screct; @Value("${my.number}") private int number; @Value("${my.bignumber}") private long bignumber; @Value("${my.uuid}") private UUID uuid; @Value("${my.number.less.than.ten}") private int lessThanTen; @Value("${my.number.in.range}") private int numberInRangel; @Override public String toString() { return "My{" + "screct=" + screct + ", number=" + number + ", bignumber=" + bignumber + ", uuid=" + uuid + ", lessThanTen=" + lessThanTen + ", numberInRangel=" + numberInRangel + '}'; } }
(3)創建對應的測試類
@SpringBootTest class ConfigApplicationTests { @Autowired My my; @Test void contextLoads() { System.out.println(my); } }
多環境配置
在實際開發中,我們的一套代碼可能會被同時部署到開發、測試、生產等多個服務器中,每個環境中諸如數據庫密碼等這些個性化配置是避免不了的,
雖然我們可以通過自動化運維部署的方式使用外部參數在服務啟動時臨時替換屬性值,但這也意味着運維成本增高。
1、在resources目錄下創建多個配置文件
application-dev.properties
application-test.properties
application-prod.properties
application.properties
spring.profiles.active=dev/test/prod
2、YAML
YAML是“YAML Ain't Markup Language YAML不是一種標記語言”的外語縮寫,但為了強調這種語言以數據做為中心,而不是以置標語言為重點,而用返璞詞重新命名。它是一種直觀的能夠被電腦識別的數據序列化格式,是一個可讀性高並且容易被人類閱讀,容易和腳本語言交互,用來表達資料序列的編程語言。它是類似於標准通用標記語言的子集XML的數據描述語言,語法比XML簡單很多。
基本原則: 1、大小寫敏感 2、使用縮進表示層級關系 3、禁止使用tab縮進,只能使用空格鍵 4、縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級。 5、使用#表示注釋 6、字符串可以不用引號標注
(1)使用yaml完成多環境配置:application.yaml
spring: profiles: active: test --- spring: profiles: dev server: port: 8080 --- spring: profiles: test server: port: 8081
(2)使用yaml進行相關參數的設置
person: name: zhangsan age: 12 sex: 男 desc: my name is ${person.name},my age is ${person.age}
對應的實體類對象
@Component @ConfigurationProperties(prefix = "person") public class Person { // @Value("${person.name}") private String name; // @Value("${person.age}") private int age; private String sex; // @Value("${person.desc}") private String desc; public Person() { } public Person(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + ", desc='" + desc + '\'' + '}'; } }
@ConfigurationProperties | @Value | |
---|---|---|
松散綁定 | 是 | 否 |
元數據支持 | 是 | 否 |
spEL表達式 | 否 |