目錄
Spring Cloud YAML 配置詳解1
Properties詳解2
自訂參數2
參數引用3
隨機數4
外部參入4
多環境配置5
YAML6
YAML有以下基本規則:6
使用YAML完成多環境配置7
在之前的執行個體中,我們使用了src/main/resources/application.properties對我們的項目做了個人化的配置,這種配置方式簡單明了,也是我們經常使用的
但是應對複雜的商業需求下,多環境和編程化的配置無法得以滿足
為此Spring Cloud為我們提供了YAML的配置方式豐富我們的功能和簡化我們的開發同時也能簡單明了的分辨配置內容。
Properties詳解
自訂參數
自訂參數可以讓我們在設定檔中定義一些參數以供在程式中使用
在這裡我們使用Spring註解的方式實現這個功能
首先建立一個實體類
@Component
public class Dalao {
@Value("${dalao.name}")
private String name;
@Value("${dalao.yanzhi}")
private String yanzhi;
…..getter setter省略
@Component 註解:
把普通pojo執行個體化到spring容器中,相當於設定檔中的<bean id="" class=""/>
修改application.propertie增加以下配置參數
dalao.name=mashibing
dalao.yanzhi=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=mashibing
dalao.yanzhi=100
dalao.desc=${dalao.name}is a good teacher,bing bu shi yin wei ${dalao.name} de yan zhi = ${dalao.yanzhi}
實體中添加
@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}= 隨機字串
設定檔中使用
dalao.xiaodi.zhangyang.yanzhi=${random.int(50,100)}
dalao.xiaodi.zhangyang.xinqing=${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 --dalao.xiaodi.zhangyang.yanzhi
使用外部配置方式可以讓我們在服務啟動時改變像服務連接埠,資料庫連接密碼,自訂屬性值等等
多環境配置
在實際開發中,我們的一套代碼可能會被同時部署到開發、測試、生產等多個伺服器中,每個環境中諸如資料庫密碼等這些個人化配置是避免不了的,雖然我們可以通過自動化營運部署的方式使用外部參數在服務啟動時臨時替換屬性值,但這也意味著營運成本增高。
我們可以通過多套配置來避免對於不同環境修改不同的配置屬性
使用方式:
首先建立多套設定檔
命名規則為:
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不是一種標記語言”的外語縮寫
但為了強調這種語言以資料做為中心,而不是以置標語言為重點,而用返璞詞重新命名。它是一種直觀的能夠被電腦識別的資料序列化格式,是一個可讀性高並且容易被人類閱讀,容易和指令碼語言互動,用來表達資料序列的程式設計語言。
它是類似於標準通用標記語言 (SGML)的子集XML的資料描述語言 (Data Description Language),文法比XML簡單很多。
YAML有以下基本規則:
1、大小寫敏感
2、使用縮排展示層級關係
3、禁止使用tab縮排,只能使用空格鍵
4、縮排長度沒有限制,只要元素對齊就表示這些元素屬於一個層級。
5、使用#表示注釋
6、字串可以不用引號標註
使用YAML完成多環境配置
方式一:
單一yml檔案 配合多propertys檔案
方式二:
單一yml檔案內配置所有變數