簡體   English   中英

Spring不接受環境變量

[英]Spring doesnt take environment variables

在我的項目中,每個環境在每個環境的文件夾內都有單獨的application.yml文件。

每個環境一個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:

  1. 當前目錄的/ config子目錄
  2. 當前目錄
  3. 類路徑/ config包
  4. 類路徑根

因此,通過傳遞的目錄層次結構,您會遇到問題。

第二,對於文件規范,可以使用Profiles 其工作原理如下:

  • 如果沒有指定的配置文件-將使用application.properties
  • 對於任何其他配置文件,也將使用名稱為application-<name>.properties配置文件

因此,如果指定devcool配置文件,則將使用屬性application.propertiesapplication-dev.properties ,`application-cool.properties。

更新:

您可以為屬性文件路徑指定傳遞spring.config.location ,但是如果您希望擁有目錄層次結構,則需要使用context.initializers.classesApplicationContextInitializer進行一些自定義

經典的解決方案是設置一個配置文件(我比較喜歡屬性,因為我很理智),並允許將覆蓋文件放置在每個已安裝的主機上。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM