How to set the Profile using application.properties in Spring?

后端 未结 3 433
借酒劲吻你
借酒劲吻你 2020-12-18 06:35

I would like to set the Profile using application.properties file with the entry:

mode=master

How to set spring.profiles.active in my conte

相关标签:
3条回答
  • 2020-12-18 06:38

    You can use either a environment variable, system variable (-D option for the JVM or application) or put it in JNDI (java:comp/env/. You cannot however put it in a properties file, as it is needed before the that specific properties file is read.

    There is more information in the @Profile javadocs.

    Another solution is to create your own ApplicationContextInitializer implementation which reads a certain file and activates the given profile.

    0 讨论(0)
  • 2020-12-18 06:40

    There are a few ways to change active profiles, none of which take directly from a properties file.

    • You can use the <init-param> as you are doing in your question.
    • You can provide a system parameter at application startup -Dspring.profiles.active="master"
    • You can get the ConfigurableEnvironment from your ApplicationContext and setActiveProfiles(String...) programmatically with context.getEnvironment().setActiveProfiles("container");

    You can use an ApplicationListener to listen to context initialization. Explanations on how to do that here. You can use a ContextStartedEvent

    ContextStartedEvent event = ...; // from method argument
    ConfigurableEnvironment env = (ConfigurableEnvironment) event.getApplicationContext().getEnvironment();
    env.setActiveProfiles("master");
    

    You can get the value "master" from a properties file as you see fit.

    0 讨论(0)
  • 2020-12-18 06:49

    You also can achieve this indirectly via System.setProperty:

    // spring.profiles file: profile1,profile2
    String anotherProfiles = Files.readString(Path.of("spring.profiles")); // or any other file
    // Even some logic can be applied here to anotherProfiles
    System.setProperty("spring.profiles.include", "dev," + anotherProfiles)
    

    This sample can be rewritten a bit to read your application.properties file and take specified profiles for Spring.

    0 讨论(0)
提交回复
热议问题