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