摘要:可以使用外部化配置來方便在不同環(huán)境的運行同樣的程序文件文件環(huán)境變量命令行參數(shù)內(nèi)置順序?qū)崿F(xiàn)了很多按以下順序進行合理的相同屬性的覆蓋目錄下的全局設置屬性,如果激活測試用例上的注解測試用例上的注解。
簡介
在應用中管理配置并不是一個容易的任務,尤其是在應用需要部署到多個環(huán)境中時。通常會需要為每個環(huán)境提供一個對應的屬性文件,用來配置各自的數(shù)據(jù)庫連接信息、服務器信息和第三方服務賬號等。通常的應用部署會包含開發(fā)、測試和生產(chǎn)等若干個環(huán)境。不同的環(huán)境之間的配置存在覆蓋關系。測試環(huán)境中的配置會覆蓋開發(fā)環(huán)境,而生產(chǎn)環(huán)境中的配置會覆蓋測試環(huán)境。Spring 框架本身提供了多種的方式來管理配置屬性文件。Spring 3.1 之前可以使用 PropertyPlaceholderConfigurer。Spring 3.1 引入了新的環(huán)境(Environment)和概要信息(Profile)API,是一種更加靈活的處理不同環(huán)境和配置文件的方式。不過 Spring 這些配置管理方式的問題在于選擇太多,讓開發(fā)人員無所適從。Spring Boot 提供了一種統(tǒng)一的方式來管理應用的配置,允許開發(fā)人員使用屬性文件、YAML 文件、環(huán)境變量和命令行參數(shù)來定義優(yōu)先級不同的配置值。
Spring Boot 可以使用外部化配置來方便在不同環(huán)境的運行同樣的程序
properties 文件
YAML 文件
環(huán)境變量
命令行參數(shù)
內(nèi)置順序Spring Boot 實現(xiàn)了很多PropertySource,按以下順序,進行合理的相同屬性的覆蓋:
home目錄下的devtools全局設置屬性(~/.spring-boot-devtools.properties,如果devtools激活)
測試用例上的@TestPropertySource注解.
測試用例上的@SpringBootTest#properties注解。
命令行參數(shù)
來自SPRING_APPLICATION_JSON的屬性(環(huán)境變量或系統(tǒng)屬性中內(nèi)嵌的內(nèi)聯(lián)JSON)
ServletConfig初始化參數(shù).
ServletContext初始化參數(shù).
來自于java:comp/env的JNDI屬性.
Java系統(tǒng)屬性 (System.getProperties()).
操作系統(tǒng)環(huán)境變量.
RandomValuePropertySource,只包含random.*中的屬性.
jar包或者war包之外Profile-specific應用屬性(application-{profile}.properties和YAML變量).
Jar包內(nèi)的的Profile-specific應用屬性 (application-{profile}.properties and YAML 變量).
Application properties outside of your packaged jar (application.properties and YAML 變量).
Application properties packaged inside your jar (application.properties and YAML 變量).
配置在@Configuration 類上@PropertySource 注解.
SpringApplication.setDefaultProperties 指定的默認屬性
Note:
以上是Spring-Boot內(nèi)部的默認順序,并不是絕對順序,實際擴展的時候需要注意順序問題,后續(xù)我會在實踐篇去說明這個。
Spring Boot 1.5 vs 2.0 變化
Relaxed Binding(寬松綁定規(guī)則)
屬性源綁定規(guī)則
Property | Note |
---|---|
acme.my-project.person.first-name | 建議在 .properties and .yml 文件中使用. |
acme.myProject.person.firstName | 標準的駝峰命名 |
acme.my_project.person.first_name | 下劃線命名, .properties and .yml 文件中使用. |
ACME_MYPROJECT_PERSON_FIRSTNAME | 大寫下劃線命名, 在環(huán)境變量中使用. |
注意:
在盡可能的情況下,請使用小寫的短橫線命名的方法會,比如: my.property-name=acme
在注解@ConfigurationProperties中定義或者在@ConditionalOnProperty的時候?qū)傩悦?strong>前綴的時候必須使用短橫分隔命名,并且必須小寫,只有注解中命名的時候必須遵守這個命名規(guī)則。我發(fā)現(xiàn)有些文章描述這個變化是不準確的,并不是所有情況下都是需要這樣,比如我可以在配置文件中使用上述表格中的命名方式。
RelaxedPropertyResolver 類解析工具被刪除掉,由Environment類代替
RelaxedDataBinder 類綁定工具類被刪除掉,在2.0.0之后使用Binder類,如下使用方式
MyProperties target = Binder.get(environment) .bind("app.acme", MyProperties.class) .orElse(null); FlagType flagType = Binder.get(environment) .bind("acme.app.my-flag", FlagType.class) .orElse(FlagType.DEFAULT);
在2.0之前的版本可以使用get/set方式注入靜態(tài)變量,2.0以后不再支持
@ConfigurationProperties Validation
如果在2.0之后的版本需要在@ConfigurationProperties配置的類中使用驗證必須使用@Validated注解
Configuration Location
spring.config.location 屬性在2.0之前的版本中會默認增加一個新的文件目錄或者文件,在2.0的版本中,如果還要使用之前的功能,請使用spring.config.additional-location
參考Spring Boot Reference Guide-2.0.3
Spring Boot Reference Guide-1.5.8
Spring Boot 2.0 Configuration Changelog
Relaxed Binding 2.0
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72075.html
摘要:的默認配置文件位置為。比如,我們需要自定義模塊的服務端口號,可以在中添加來指定服務端口為,也可以通過來指定應用名該名字在應用中會被注冊為服務名。同時,配置內(nèi)容都對開發(fā)人員可見,本身這也是一種安全隱患。 在快速入門一節(jié)中,我們輕松的實現(xiàn)了一個簡單的RESTful API應用,體驗了一下Spring Boot給我們帶來的諸多優(yōu)點,我們用非常少的代碼量就成功的實現(xiàn)了一個Web應用,這是傳統(tǒng)的...
摘要:引言的一個便捷功能是外部化配置,可以輕松訪問屬性文件中定義的屬性。本文將詳細介紹的使用。 引言 Spring Boot的一個便捷功能是外部化配置,可以輕松訪問屬性文件中定義的屬性。本文將詳細介紹@ConfigurationProperties的使用。 配置項目POM 在pom.xml中定義Spring-Boot 為parent org.springframework.boot...
摘要:在服務治理方面,相較于而言,并不成熟。遺憾的是,往往被部分開發(fā)者片面地視作服務治理的框架,而非微服務基礎設施。因此,建議開發(fā)人員將或者遷移為服務。因此,下一步需要將其配置服務遠程。當服務提供方啟動后,下一步實現(xiàn)一個服務消費方。 原文鏈接:Dubbo Spring Cloud 重塑微服務治理,來自于微信公眾號:次靈均閣 摘要 在 Java 微服務生態(tài)中,Spring Cloud1 成為...
摘要:可簡單地認為它是的擴展,負載均衡自然成為不可或缺的特性。類似的特性在項目也有體現(xiàn),它是另一種高性能代理的方案,提供服務發(fā)現(xiàn)健康和負載均衡。 Dubbo Cloud Native 實踐與思考 分享簡介 Cloud Native 應用架構(gòu)隨著云技術的發(fā)展受到業(yè)界特別重視和關注,尤其是 CNCF(Cloud Native Computing Foundation)項目蓬勃發(fā)展之際。Dubbo...
摘要:如果還在使用以前的版本,想要使用非嚴格的,需要做以下配置在中引入依賴在中配置更多屬性配置請參考中模塊的屬性介紹。這樣的話很好的做到了前后端分離。 本文首發(fā)于:https://y0ngb1n.github.io/a/5... 開發(fā)環(huán)境 org.springframework.boot spring-boot-starter-parent 2.1.0.RELEASE ...
閱讀 1554·2021-11-19 09:55
閱讀 2778·2021-09-06 15:02
閱讀 3534·2019-08-30 15:53
閱讀 1071·2019-08-29 16:36
閱讀 1230·2019-08-29 16:29
閱讀 2286·2019-08-29 15:21
閱讀 621·2019-08-29 13:45
閱讀 2679·2019-08-26 17:15