20

如何在 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 运行应用程序,则开发配置文件设置为活动状态并且工作正常。但是当我部署在独立的tomcat中时。这没用。

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

有关如何设置活动配置文件的任何帮助。

4

6 回答 6

22

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

   SpringApplication springApp = new SpringApplication(Main.class);
   springApp.setAdditionalProfiles("profile1", "profile2");
   springApp.run(args);
于 2019-02-24T16:43:44.900 回答
18

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

    @SpringBootApplication
    public class MyApplication extends SpringBootServletInitializer {

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

        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "dev"); 
            super.onStartup(servletContext);
        }
    }
于 2015-10-08T10:04:00.743 回答
11

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

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

@SpringBootApplication
public class MySpringProgram {

    public static void main(String[] args) {
        new SpringApplicationBuilder(MySpringProgram.class)
                .profiles("profile1", "profile2")
                .run(args);
    }
}
于 2019-10-24T11:48:20.957 回答
3

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

CATALINA_OPTS="-Dspring.profiles.active=dev"
于 2015-07-10T14:05:38.013 回答
1
System.setProperty("spring.profiles.active", "dev");
于 2018-01-08T13:57:24.773 回答
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);

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

于 2019-12-12T16:20:13.797 回答