1. 程式人生 > >spring boot/cloud 啟動方式說明

spring boot/cloud 啟動方式說明

spring boot /cloud

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

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

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

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

由於spring boot/spring cloud構建完成後通常是以.jar後綴結尾的包,並且內嵌web承載容器,所以spring boot/spring cloud啟動方式很簡單,即(以tomcat為例):

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

以上方式就可以啟動spring boot/spring cloud應用

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

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

在實際應用中管理配置並不是一個容易的任務,尤其是在應用需要部署到多個環境中時。通常會需要為每個環境提供一個對應的屬性文件,用來配置各自的數據庫連接信息、服務器信息和第三方服務賬號等。

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

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

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子目錄裏。

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版本!


spring boot/cloud 啟動方式說明