[英]Spring doesnt take environment variables
在我的項目中,每個環境在每個環境的文件夾內都有單獨的application.yml文件。
注意:下面臨時制作了紅色yml文件,以使代碼正常工作。 但應在固定后將其移除。 所以我要根據環境使用單獨的application.yml文件。 特別是我需要使用local / application.yml進行本地開發
下面有一個在我的項目中獲取env變量的示例
@Component
@Configuration
public class ApplicationProperties {
@Value("${ex.my.url}")
private String myServiceUrl;
// getters setters and nedded stuff
}
但這是行不通的,因為找不到找到所需環境的方法。 因為它在單獨的文件夾中。 所有其他示例都提到了在資源文件夾中獲取yml文件的方法,無需單獨的文件夾。
這個問題有解決辦法嗎?
在我的項目中,我使用VM選項指定一個配置文件:-Dspring.profiles.active = local
然后我有一個名為application-local.yml的文件
在生產中:-Dspring.profiles.active = prod,將使用文件application-prod.yml
在資源文件夾中
制作application.yml,application-local.yml,application-dev.yml等文件。
然后在application.yml中
spring.profile.active = ${ENV}
現在在運行期間,請從Intellij下的運行/調試配置中指定ENV變量,或者在application.yml中提及要為其構建jar的配置文件。
或者,您可以使用-D spring.profile.active = dev
首先,從文檔中 :
SpringApplication在以下位置從application.properties文件加載屬性,並將它們添加到Spring Environment:
- 當前目錄的/ config子目錄
- 當前目錄
- 類路徑/ config包
- 類路徑根
因此,通過傳遞的目錄層次結構,您會遇到問題。
第二,對於文件規范,可以使用Profiles 。 其工作原理如下:
application.properties
application-<name>.properties
配置文件 因此,如果指定dev
和cool
配置文件,則將使用屬性application.properties
, application-dev.properties
,`application-cool.properties。
更新:
您可以為屬性文件路徑指定傳遞spring.config.location
,但是如果您希望擁有目錄層次結構,則需要使用context.initializers.classes
和ApplicationContextInitializer進行一些自定義
經典的解決方案是設置一個配置文件(我比較喜歡屬性,因為我很理智),並允許將覆蓋文件放置在每個已安裝的主機上。
Spring支持這種開箱即用的功能。
這是一個例子:
public static void main(final String[] argumentArray)
{
final StringApplicationBuilder springApplicationBuilder;
springApplicationBuilder = new SpringApplicationBuilder(YourSpringBootApplication.class)
springApplicationBuilder.properties(
"spring.config.location=classpath:/yourConfig.properties,/some/path/to/overrides/directory/yourConfig.properties");
springApplicationBuilder.build().run(argumentArray);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.