spring boot/cloud 啓動方式說明

spring boot/cloudsh的java開源框架,spring cloud更多注重服務註冊以及服務治理,通俗來說就是咱們所說的微服務,須要注意的是spring cloud是基於spring boot的擴展版,關於更多spring boot 以及spring cloud 文檔請查看官方文檔!html

spring boot 參考文檔:
https://qbgbook.gitbooks.io     https://docs.spring.io/spring-boot/docs/current/reference/html/java

spring cloud參考文檔:
https://springcloud.cc     https://cloud.spring.io/spring-cloud-config/single/spring-cloud-config.htmlgit

一.關於spring boot/spring cloud 啓動方式

因爲spring boot/spring cloud構建完成後一般是以.jar後綴結尾的包,而且內嵌web承載容器,因此spring boot/spring cloud啓動方式很簡單,即(以tomcat爲例):web

java -jar xxxxxx-0.0.1-xxx.jar --spring.config.location=/path/application.properties

以上方式就能夠啓動spring boot/spring cloud應用spring

二.關於spring boot/spring cloud 配置生效順序優先級

通常在一個項目中,老是會有好多個環境。好比: 開發環境 -> 測試環境 -> 預發佈環境 -> 生產環境 每一個環境上的配置文件老是不同的,甚至開發環境中每一個開發者的環境可能也會有一點不一樣,Spring Boot提供了一種優先級配置讀取的機制來幫助咱們從這種困境中走出來. 常規狀況下,咱們都知道Spring Boot的配置會從其對應的application.properties,(默認配置文件名爲:application)中讀取。其實是從其jar包下resource目錄下的application.propert讀取配置。sql

在實際應用中管理配置並非一個容易的任務,尤爲是在應用須要部署到多個環境中時。一般會須要爲每一個環境提供一個對應的屬性文件,用來配置各自的數據庫鏈接信息、服務器信息和第三方服務帳號等。shell

一般的應用部署會包含開發、測試和生產等若干個環境。不一樣的環境之間的配置存在覆蓋關係。測試環境中的配置會覆蓋開發環境,而生產環境中的配置會覆蓋測試環境,因此Spring Boot 提供了一種統一的方式來管理應用的配置,容許開發人員使用屬性文件YAML 文件、環境變量和命令行參數來定義優先級不一樣的配置值。數據庫

Spring Boot 所提供的配置優先級順序比較複雜。按照優先級從高到低的順序,具體的列表(從高到低)以下所示:bootstrap

1.命令行參數(優先級最高)。
2.經過 System.getProperties() 獲取的 Java 系統參數。
3.操做系統環境變量。
4.從java:comp/env 獲得的 JNDI 屬性。
5.經過 RandomValuePropertySource 生成的random.*屬性。
6.jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件,經過spring.config.location參數指定
7.jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
8.jar包外部的application.properties或application.yml(不帶spring.profile)配置文件
9.jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
10.應用 Java配置類,包含@Configuration註解的 Java 類,經過@PropertySource註解聲明的屬性文件。
11.經過SpringApplication.setDefaultProperties聲明的默認屬性。
application.properties和application.yml文件能夠放在一下四個位置:

1.外置:在相對於應用程序運行目錄的/congfig子目錄裏。tomcat

2.外置:在應用程序運行的目錄裏

3.內置:在config包內

4.內置:在Classpath根目錄

若是Spring Boot在優先級更高的位置找到了配置,那麼它就會忽略優先級低的配置。下面咱們簡單講講這些優先級。Spring Boot 的這個配置優先級看似複雜,實際上是很合理的。命令行參數的優先級之因此被設置爲最高,是由於能夠方便咱們在測試或生產環境中快速地修改配置參數值,而不須要從新打包和部署應用。SpringApplication 類默認會把以「--」開頭的命令行參數轉化成應用中可使用的配置參數,如 「--name=Alex」 會設置配置參數 ,「name」 的值爲 「Alex」。若是不須要這個功能,能夠經過SpringApplication.setAddCommandLineProperties(false)禁用解析命令行參數。

若是應用爲spring cloud構建,會引入bootstrap.yml或bootstrap.properties文件,注意spring cloud中bootstrap.yml配置會優先加載,即在應用啓動前會先加載該配置,因此在同時存在application.yml配置文件和bootstrap.yml配置文件時候,這時會優先加載bootstrap.yml配置,一樣bootstrap配置也能夠外部配置,即在指定的配置目錄新建該文件就可覆蓋內嵌在jar包裏的bootstrap.yml配置,注意此時只須要用命令行指定配置文件的目錄,如A應用的配置文件爲:/data/webs/A/conf/。

這時就須要用命令行 --spring.config.location=/data/webs/A/conf/指定配置文件加載目錄便可,須要注意的是:無論spring boot 仍是spring cloud均可以經過命令行傳參更改配置的優先級!

三.關於spring boot/spring cloud 配置文件名稱

mo9微服務應用項目中,全部的配置文件name都是使用默認名稱:application(無論後綴.properties或者.yml),統一使用默認名稱,不過配置會結合profiles屬性來區分對應配置,比喻:運維配置,業務配置,還有其餘配置,以下:

默認配置文件:application.yml或application.properties,須要注意的是:開發環境激活的屬性爲:dev以及ops;生產環境激活的屬性爲:prod以及ops,以下代碼所示:

開發環境(dev)

spring.profiles.active=dev
spring.profiles.include=ops

生產環境(prod)

spring.profiles.active=prod
spring.profiles.include=ops
通用運維配置文件:application-ops.yml或application-ops.properties;

主要配置內容爲運維配置,比喻:內嵌tomcat服務端口,管理端口,最大鏈接數,超時時間,contxt-path等等運維上配置

開發環境業務配置文件:application-dev.yml或application-dev.properties;

主要內容爲開發環境上業務的配置,比喻:數據庫配置,nosql配置,mq配置,接口鏈接配置。

生產環境業務配置文件:application-prod.yml或application-prod.properties;

主要內容爲生產環境上業務的配置,比喻:數據庫配置,nosql配置,mq配置,接口鏈接配置。

三.關於spring boot/spring cloud 日誌配置

默認狀況下spring boot啓動方式應用日誌都是輸出到控制檯,若是咱們須要輸出到文件,則須要在application-ops.properties或application-ops.yml定義如下配置參數:logging.file 或 logging.path固然最直接的方式能夠直接在啓動時輸出到某個文件,還能夠自定義日誌配置而後在application-ops.yml配置文件中經過如下配置應用便可

logging.config=/path/logback-spring.xml

注意:關於日誌配置文件最好是以-spring.xml結尾的文件!

四.關於spring boot/spring cloud 框架版本

因爲spring boot版本更新較快,目前最新版本爲2.0,考慮到測試,生產環境配置文件的兼容性,因此在實際開發過程當中建議你們使用2.0如下版本,例如1.5.8 release版本!

相關文章
相關標籤/搜索