Spring Cloud爲我們提供了YAML的配置方式豐富我們的功能和簡化我們的開發同時也能簡單明瞭的分辨配置內容。
Properties詳解
自定義參數
自定義參數可以讓我們在配置文件中定義一些參數以供在程序中使用
在這裏我們使用Spring註解的方式實現這個功能
首先創建一個實體類
@Component
public class Dalao {
@Value("${dalao.name}")
private String name;
@Value("${dalao.yi}")
private String yi;
…..getter setter省略
@Component 註解:
把普通pojo實例化到spring容器中,相當於配置文件中的<bean id="" class=""/>
修改application.propertie增加以下配置參數
dalao.name=mag
dalao.yi=100
使用自定義參數
Spring 管理對象
讓Spring 注入對象,這裏需要注意的是如果自己new的對象是沒有被Spring容器管理的,所以不會自動注入屬性值給我們
@Autowired
private Dalao dalao;
測試打印
System.out.println(ToStringBuilder.reflectionToString(dalao));
System.out.println(ToStringBuilder.reflectionToString(new Dalao()));
ToStringBuilder
這裏用到了ToStringBuilder完成對象轉字符串,要使用這個對象的話需要引入Spring的工具包commons-lang3
Pom
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
參數引用
在application.propertie中的各個參數值是可以相互引用的
我們修改一下之前的配置
dalao.name=mag
dalao.yi=100
dalao.desc=${dalao.name}is${dalao.name} = ${dalao.yi}
實體中添加
@Value("${dalao.desc}")
private String desc;
輸出結果
隨機數
有些特殊需求,我們不希望設置的屬性值是一個固定值,比如服務器隨機端口號,某些編號等,我們可以使用${radom}在配置中產生隨機int,long或是string
${random.int()} = 隨機int
${random.long} = 隨機long
${random.int(50)} = 50以內的隨機數
${random.int(50,100)} = 50~100之間的int隨機數
${random.value}= 隨機字符串
配置文件中使用
di=${random.int(50,100)}
dg=${random.value}
外部參入
在微服務架構中經常會使用自動運維部署工具,使用這些工具來啓動我們的服務
我們的Spring boot程序通常是使用java –jar的方式來啓動運行的
對於服務端口號或是一些其他需要在啓動服務的時候才能決定的值,如果在配置中寫死或是用隨機明顯是滿足不了需求的
我們可以使用外部參數替換自定義的參數
比如臨時決定服務端口:
java -jar demo-0.0.1-SNAPSHOT.jar --server.port=60
顏值同時發生變化:
java -jar demo-0.0.1-SNAPSHOT.jar --server.port=60 --di
使用外部配置方式可以讓我們在服務啓動時改變像服務端口,數據庫連接密碼,自定義屬性值等等
多環境配置
在實際開發中,我們的一套代碼可能會被同時部署到開發、測試、生產等多個服務器中,每個環境中諸如數據庫密碼等這些個性化配置是避免不了的,雖然我們可以通過自動化運維部署的方式使用外部參數在服務啓動時臨時替換屬性值,但這也意味着運維成本增高。
我們可以通過多套配置來避免對於不同環境修改不同的配置屬性
使用方式:
首先創建多套配置文件
命名規則爲:
Application-*,properties
Application-dev,properties = 開發環境
Application-test,properties= 測試環境
Application-prod,properties=生成環境
接下來我們在 application.properties中設置哪套配置生效的開關
使用 spring.profiles.active=dev
在使用java –jar的方式啓動服務的時候我們就可以通過外部參數改變整套配置了
java -jar demo-0.0.1-SNAPSHOT.jar -- spring.profiles.active=test
YAML
YAML是“YAML Ain't Markup Language YAML不是一種標記語言”的外語縮寫
但爲了強調這種語言以數據做爲中心,而不是以置標語言爲重點,而用返璞詞重新命名。它是一種直觀的能夠被電腦識別的數據序列化格式,是一個可讀性高並且容易被人類閱讀,容易和腳本語言交互,用來表達資料序列的編程語言。
它是類似於標準通用標記語言的子集XML的數據描述語言,語法比XML簡單很多。
YAML有以下基本規則:
1、大小寫敏感
2、使用縮進表示層級關係
3、禁止使用tab縮進,只能使用空格鍵
4、縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級。
5、使用#表示註釋
6、字符串可以不用引號標註
使用YAML完成多環境配置
方式一:
單一yml文件 配合多propertys文件
方式二:
單一yml文件內配置所有變量