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



我有Spring Boot应用程序,我有3个属性文件:applications.properties, applications-dev.properties, applicaton-prod.properties。在CCD_ 2中,我指定CCD_。但我想允许在没有产品配置文件(applicaton-prod.properties(的情况下启动应用程序。这意味着spring必须自动启动dev概要文件(applications-dev.properties(中的应用程序。我该如何实现?可能存在某些MissingOnProfile注释?(我的任务是基于application.properties文件创建不同的应用程序行为。此外,我在每个依赖于特定概要文件的bean中使用@Profile注释。所有任务都是创建WebInstaller,在完成步骤中,我将创建application-prod.properties,通过使用RestartEndpoint,我将重新启动应用程序上下文,并从application-prod.properties注入所需的bean。但我需要用oudapplication-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.properties包含所有配置文件(dev、stage、prod等(共有的属性。对于配置文件,您应该按照建议创建一个名为application-{profile}.properties的文件,该文件将根据变量profile定义的环境覆盖某些属性。

通常的方法是将这些变量作为参数传递给JVM(例如:-Dprofile=dev(,如果从IDE启动,则可以通过修改servlet容器的运行配置来设置JVM。如果是独立的tomcat,您可以通过文件setenv.sh中的JAVA_OPTIONS变量传递此信息。

如果您需要手动用概要文件实现某种业务逻辑,例如,指定活动概要文件默认为prod

  1. application.properties中定义spring.profiles.active=prod

例如,如果缺少applications.properties0,则活动配置文件应为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,这在您的情况下是不起作用的,因为活动配置文件prod将在spring.profiles.active=prod0中,但它与application-prod.properties缺少这一事实无关

如果您想要,那么为什么需要application-dev.properties。将您的dev属性保留在application.properties中。如果设置了配置文件,则applicatoin.properties值将被覆盖。弹簧引导读取CCD_ 35&application.yml,如果配置文件激活则替换值

相关内容

  • 没有找到相关文章

最新更新