Spring Boot Programmatically setting profiles

﹥>﹥吖頭↗ 提交于 2019-11-30 06:47:05

问题


How to set active profile in spring boot Application. This application will be deployed in stand alone Tomcat.

I have 2 property files application-{profile}.properties.

My Application class

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

if I run the app with embedded tomcat the dev profile is set as active and it works fine. But when I deploy in stand alone tomcat. It does not work.

I tried to set active profile in configure method. but i get null pointer exception, when i get the environment from the context.

Any help on how to set the active profile.


回答1:


I also had the same problem and after struggling for half a day I ended up with this:

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



回答2:


You can set additional profiles on start up:

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



回答3:


Instead of activating the profile dynamically, you can put the profiles as vm-arguments in the catalina.sh

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



回答4:


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



回答5:


Another way of doing it in Spring Boot 2 is by using 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);
    }
}


来源:https://stackoverflow.com/questions/31267274/spring-boot-programmatically-setting-profiles

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!