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

问题描述 投票:9回答:4

如何在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方法中设置活动配置文件。但是当我从上下文中获取环境时,我得到空指针异常。

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

spring-boot tomcat8 spring-profiles
4个回答
10
投票

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

    @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);
        }
    }

3
投票

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

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

1
投票

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

CATALINA_OPTS="-Dspring.profiles.active=dev"

1
投票

System.setProperty(“spring.profiles.active”,“dev”);

© www.soinside.com 2019 - 2024. All rights reserved.