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

Muk*_*kun 11 spring-profiles tomcat8 spring-boot

如何在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);
      }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

fal*_*con 12

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

    @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);
        }
    }
Run Code Online (Sandbox Code Playgroud)


nyx*_*yxz 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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*sky 6

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

   SpringApplication springApp = new SpringApplication(Main.class);
   springApp.setAdditionalProfiles("profile1", "profile2");
   springApp.run(args);
Run Code Online (Sandbox Code Playgroud)

  • 这是一个更好的答案 - 原因 - 接受的答案没有考虑在微型配置文件服务器上完成的部署。在这些上,通常会部署许多共享 active.profiles 标志的战争。通过执行“接受的答案”-我们将覆盖其他应用程序标志! (2认同)