web-dev-qa-db-ja.com

SpringBootプログラムでプロファイルを設定する

SpringBootアプリケーションでアクティブプロファイルを設定する方法。このアプリケーションは、スタンドアロンのTomcatにデプロイされます。

2つのプロパティファイルアプリケーションがあります-{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にデプロイすると。それは動作しません。

Configureメソッドでアクティブプロファイルを設定しようとしました。しかし、コンテキストから環境を取得すると、nullポインタ例外が発生します。

アクティブなプロファイルを設定する方法に関するヘルプ。

14
Mukun

私も同じ問題を抱えていて、半日苦労した後、私はこれに行き着きました:

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

起動時に追加のプロファイルを設定できます。

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

プロファイルを動的にアクティブ化する代わりに、catalina.shにvm-argumentsとしてプロファイルを配置できます。

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

Spring Boot 2でそれを行う別の方法は、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);
    }
}
1
nyxz
System.setProperty("spring.profiles.active", "dev");
1
Cork Kochi
SpringApplication app =new SpringApplication(Application.class);
    Properties props = new Properties();
    props.put("AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAM", "dev");
    app.setDefaultProperties(props);
    app.run(args);

このコードはシステムプロパティを設定しないため、より良い解決策だと思います

0
taha