YAML配置,spring boot 配置文件


1 概念
YAML是一種人們可以輕松閱讀的數據序列化格式,並且它非常適合對動態編程語言中使用的數據類型進行編碼。YAML是YAML Ain't Markup Language簡寫,和GNU("GNU's Not Unix!")一樣,YAML是一個遞歸着說“不”的名字。不同的是,GNU對UNIX說不,YAML說不的對象是XML。YAML不是XML。它可以用作數據序列,配置文件,log文件,Internat信息和過濾。
2 優點
YAML的可讀性好。
YAML和腳本語言的交互性好。
YAML使用實現語言的數據類型。
YAML有一個一致的信息模型。
YAML易於實現。
3 YAML的適用范圍
由於實現簡單,解析成本很低,YAML特別適合在腳本語言中使用。列一下現有的語言實現:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是腳本語言.
YAML比較適合做序列化。因為它是宿主語言數據類型直轉的。
YAML做配置文件也不錯。比如Ruby on Rails的配置就選用的YAML。對ROR而言,這很自然,也很省事.
由於兼容性問題,不同語言間的數據流轉建議現在不要用YAML.
4 YAML不足
YAML和XML不同,沒有自己的數據類型的定義,而是使用實現語言的數據類型。這一點,有可能是出奇制勝的地方,也可能是一個敗筆。如果兼容性保證的不好的話,YAML數據在不同語言間流轉會有問題。
假如兼容性沒問題的話,YAML就太完美了。輕巧,敏捷,高效,簡便,通用。

 

YAML與properties的不同     

YAML的配置文件格式例如:

environments:
    dev:
          url: http://dev.bar.com
          name: Developer Setup
    prod:
          url: http://foo.bar.com
          name: My Cool App

與其等價的properties:

environments.dev.url=http://dev.bar.com
environments.dev.name=Develop Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App

通過YAML的配置方式我們可以看出,配置字符量比properties少了很多,且結構變得更清晰。

 

 自定義參數

除了可以在Spring Boot的配置文件中設置各個starter模塊中預定義的配置屬性,我們還可以在配置文件中定義一些我們需要的自定義屬性。比如在application.properties中添加:

book.name=SpringCloudInAction
book.author=ZhaiYongchao

然后,在應用中可以通過@Value注解來加載這些自定義的參數,比如:

@Component
public class Book{
    @Value(“${book.name}”)
    private String name;
    @Value(“${book.author}”)
    private String author;
    //省略getter和setter
}

然后再Spring Boot的主類中指出該類所在包即可。

@Value注解加載屬性時可以支持兩種表達式來進行配置:

  • 一種是上面介紹的PlaceHolder方式,格式為${…},大括號內為PlaceHolder.
  • 另一種是使用SpEL表達式,格式為#{…},大括號內為SpEL表達式。

參數引用

book.name=Spring Cloud
book.author=ZhaiYongchao
book.desc=${book.author} is writing 《${book.name}》

這樣,book.desc的值為:ZhaiYongchao is writing 《Spring Cloud》。

使用隨機數

在配置文件中使用${random.int}即可獲得一個隨機的int型數據。

名稱

描述

${random.value}

取得隨機字符串

${random.int} 取得隨機int型數據
${random.long} 取得隨機long型數據
${random.int(10)} 取得10以內的隨機數
${random.int[10,20]} 取得10~20的隨機數

 命令行參數

我們使用java -jar命令來啟動一個spring boot應用,啟動時,可以設置參數,例如:

java –jar xxx.jar --server.port=8081

該命令直接以命令行的方式指定了spring boot應用啟動的端口號為8081.

        以命令行的方式啟動spring boot應用時,連續的--就是對application.properties中的屬性進行賦值的標識。

多環境配置

上面通過命令行的方式修改應用的配置文件,當應用特別多時,這樣的方式也許並不太好。因此需要多環境配置。

關於profile更多內容見《Spring 3.1新特性之一:spring注解之@profile

方式一:

YAML還可以在一個單個文件中通過使用spring.profiles屬性來定義多個不同的環境配置。例如:

server:
    port:8881 --- spring: profiles:test server: port:8882 ---- spring: profiles: prod server: port:8883

當指定為test環境時,server.port將使用8882端口;prod環境時,server.port將使用8883端口;沒有指定時使用8881端口。

方式二:

YAML將屬性加載到內存中保存的是有序的,所以當配置文件中的信息需要具備順序含義時,YAML的配置方式比起properties配置文件更有優勢。

        在spirng boot中,多環境配置的文件名需要滿足 application-{profile}.properties的格式,比如:

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

        具體哪個配置文件會被加載,需要在application.properties文件中通過string.profiles.active屬性來設置,其值對應配置文件中的{profile}值(也可以使用java -jar xxx.jar --spring.profiles.active命令指定需要加載的配置文件)。如spring.profiles.active=test就會加載application-test.properties配置文件內容。

加載順序

 

 

 

 監控與管理

        簡短的前言

              在為服務架構中,通過將龐大的單體系統拆分成多個提供不同服務的應用。雖然各個應用的內部邏輯因分解而得以簡化,但由於部署應用的數量成倍增長,使得系統的維護復雜度大大提升。

        隨着應用的不斷增加,系統集群中出現故障的次數也越來越多,雖然在高可用機制的保護下,個別故障不會影響系統的對外服務,但是這些頻繁出現的鼓掌需要被及時發現和處理才能長期保證系  統處於健康可用狀態。為了達到這個目的,我們需要一套自動化的監控運維機制,該機制要能夠不間斷地收集各個微幅務應用的各項指標情況,並根據這些基礎指標信息來制定監控和預警規則。

初始actuator

        引入該模塊能夠自動為spring boot構建的應用提供一系列用於監控的端點。Spring Cloud在實現各個為服務組件的時候,進一步為該模塊做了不少擴展。比如,為原生端點增加了更多的指標和度量信息。

 引入actuator

  1. 在現有的spring boot應用的pom.xml文件中引入spring-boot-starter-actuator依賴即可。

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
</dependency> 

    2.增加該依賴后重新啟動應用。此時可以在控制台中看到如下所示:

image

上圖顯示了一批端點定義,這些端點並非我們在程序中定義的,而是由spring-boot-starter-actuator模塊根據應用依賴和配置自動創建出來的監控和管理端點。端點具體還以不再說明,可以自行百度。

如果你的世界是一條一維的曲線,即便是一顆小小的沙礫也會成為你永遠邁不過去的坎;如果你的世界是一張二維的曲面,哪怕是一條細若游絲的線,也會成為橫亘你面前永遠無法逾越的鴻溝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM