Spring Boot以编程方式设置配置文件

时间:2015-07-07 11:25:39

标签: spring-boot tomcat8 spring-profiles

如何在spring boot应用程序中设置活动配置文件。该应用程序将部署在独立的Tomcat中。

我有2个属性文件application- {profile} .properties。

我的申请类

    @SpringBootApplication
        public class Application extends SpringBootServletInitializer {

            @Override
            protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {        
                return application.sources(Application.class);
            }

            public static void main(String[] args) {
               System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "dev");
 ApplicationContext ctx = SpringApplication.run(Application.class, args);
      }
    }

如果我使用嵌入式tomcat运行应用程序,dev配置文件将设置为活动状态,并且工作正常。但是当我单独部署tomcat时。它不起作用。

我尝试在configure方法中设置活动配置文件。但是当我从上下文中获取环境时,我得到空指针异常。

有关如何设置有效个人资料的任何帮助。

6 个答案:

答案 0 :(得分:10)

我也有同样的问题,经过半天的努力,我最终得到了这个:

runScript

答案 1 :(得分:1)

您可以将配置文件作为vm-arguments放在catalina.sh中,而不是动态激活配置文件

echo "prefix-2020.80-suffix-1" | grep -oP '^([[:alnum:]]+-)?\K[0-9]+'
2020

答案 2 :(得分:1)

System.setProperty(" spring.profiles.active"," dev");

答案 3 :(得分:1)

您可以在启动时设置其他配置文件:

   SpringApplication springApp = new SpringApplication(Main.class);
   springApplication.setAdditionalProfiles("profile1", "profile2");
   springApplication.run(args);

答案 4 :(得分:0)

Spring Boot 2 中执行此操作的另一种方法是使用SpringApplicationBuilder

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class MyWorkerProgram {

    public static void main(String[] args) {
        new SpringApplicationBuilder(MyWorkerProgram.class).profiles("worker").run(args);
    }
}

答案 5 :(得分:0)

SpringApplication app =new SpringApplication(Application.class);
    Properties props = new Properties();
    props.put("AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAM", "dev");
    app.setDefaultProperties(props);
    app.run(args);

我认为这段代码是更好的解决方案,因为它没有设置系统属性