在以前的項目開發中,咱們能夠使用xml,properties進行相關的配置,這種配置方式比較簡單,可是在應對複雜的商業需求下,多環境和編程化的配置沒法獲得知足,所以springboot爲咱們提供了YAML的配置方式豐富功能和簡化開發。spring
一般狀況下,咱們能夠使用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)建立對應的實體類對象springboot
@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文件中使用隨機數app
(1)在application.properties文件中添加以下屬性less
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]}
(2)建立對應的實體類運維
@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)建立對應的測試類dom
@SpringBootTest class ConfigApplicationTests { @Autowired My my; @Test void contextLoads() { System.out.println(my); } }
多環境配置編程語言
在實際開發中,咱們的一套代碼可能會被同時部署到開發、測試、生產等多個服務器中,每一個環境中諸如數據庫密碼等這些個性化配置是避免不了的,
雖然咱們能夠經過自動化運維部署的方式使用外部參數在服務啓動時臨時替換屬性值,但這也意味着運維成本增高。
一、在resources目錄下建立多個配置文件
application-dev.properties
application-test.properties
application-prod.properties
application.properties
spring.profiles.active=dev/test/prod
YAML是「YAML Ain't Markup Language YAML不是一種標記語言」的外語縮寫,但爲了強調這種語言以數據作爲中心,而不是以置標語言爲重點,而用返璞詞從新命名。它是一種直觀的可以被電腦識別的數據序列化格式,是一個可讀性高而且容易被人類閱讀,容易和腳本語言交互,用來表達資料序列的編程語言。它是相似於標準通用標記語言的子集XML的數據描述語言,語法比XML簡單不少。
基本原則: 一、大小寫敏感 二、使用縮進表示層級關係 三、禁止使用tab縮進,只能使用空格鍵 四、縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級。 五、使用#表示註釋 六、字符串能夠不用引號標註
(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表達式 | 否 | 是 |