簡體   English   中英

如果prod配置文件不存在,則Spring Boot 2使用dev配置文件

[英]Spring Boot 2 use dev profile if prod profile is not exist

我有Spring Boot Application,我有3個屬性文件: applications.properties, applications-dev.properties, applicaton-prod.properties applications.properties我指定spring.profiles.active=prod 但是我想允許沒有產品概要文件( applicaton-prod.properties )的應用程序啟動。 這意味着spring必須自動在dev profile( applications-dev.properties )中啟動應用applications-dev.properties 我該如何實施? 可能存在某些MissingOnProfile批注嗎?)我的任務是基於application.properties文件創建不同的應用程序行為。 我也在每個依賴於特定配置文件的bean中使用@Profile批注。 所有的任務是創建WebInstaller,並在完成步驟中我將創建application-prod.properties並通過RestartEndpoint我會重新從應用環境和要求的豆類application-prod.properties將注入。 但是我需要使用application-prod.properties進行啟動,但是如果該文件存在,我將在prod配置文件中啟動。

您將配置文件信息設置在錯誤的位置。 文件application.properties包含所有概要文件(dev,stage,prod等)共有的屬性。 對於配置文件,應按照您的建議,創建一個名為application-{profile}.properties的文件,該application-{profile}.properties將根據變量profile定義的環境覆蓋某些屬性。

通常的方法是將此變量作為參數傳遞給JVM(例如-Dprofile=dev ),如果從IDE啟動,則可以通過修改servlet容器的運行配置來進行設置。 在獨立的Tomcat的情況下,你可以通過這個信息JAVA_OPTIONS變量在文件中找到setenv.sh

例如,如果您需要使用概要文件手動實現某種業務邏輯,請指定默認情況下,活動概要文件為prod

  1. application.properties定義spring.profiles.active=prod

例如,如果缺少application-prod.properties ,則活動配置文件應該是dev ,您可以使用EnvironmentPostProcessor來實現:

允許在刷新應用程序上下文之前自定義應用程序的環境

  1. 使用您的業務邏輯實現EnvironmentPostProcessor

     public class ProfileResolverEnvironmentPostProcessor implements EnvironmentPostProcessor { @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { ClassPathResource prodPropertiesResource = new ClassPathResource("application-prod.properties"); // if "application-prod.properties" missing and "prod" profile active if (!prodPropertiesResource.exists() && environment.acceptsProfiles("prod")) { environment.setActiveProfiles("dev"); //environment.addActiveProfile("dev"); } } } 
  2. META-INF/spring.factories注冊您的EnvironmentPostProcessor實現類

org.springframework.boot.env.EnvironmentPostProcessor=\\ com.example.ProfileResolverEnvironmentPostProcessor

另外,請參閱 Spring Boot文檔定制環境

額外:

當然,您可以指定在缺少概要文件@Profile("!prod")將處於活動狀態的bean,但是如果您定義spring.profiles.active=prod ,則在您的情況下spring.profiles.active=prod ,因為活動概要文件prod將是在Environment但與缺少application-prod.properties的事實無關

你可以這樣做:

SpringApplication application = new SpringApplication(IdMatrixApplication.class);
File file = new File("src/main/resources/dev/application-prod.properties");
if (file.exists()) {
    application.setAdditionalProfiles("prod","dev");
}
application.run(args);

如果要這樣做,那么為什么需要application-dev.properties 將您的開發屬性保留在application.properties 如果配置文件設置,則applicatoin.properties值將被覆蓋。 春天開機同時讀取application.properties && application.yml如果輪廓主動替換值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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