Spring Boot Programmatically setting profiles

Mukun picture Mukun · Jul 7, 2015 · Viewed 11.7k times · Source

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.

Answer

falcon picture falcon · Oct 8, 2015

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