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ポインタ例外が発生します。
アクティブなプロファイルを設定する方法に関するヘルプ。
私も同じ問題を抱えていて、半日苦労した後、私はこれに行き着きました:
@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);
}
}
起動時に追加のプロファイルを設定できます。
SpringApplication springApp = new SpringApplication(Main.class);
springApp.setAdditionalProfiles("profile1", "profile2");
springApp.run(args);
プロファイルを動的にアクティブ化する代わりに、catalina.shにvm-argumentsとしてプロファイルを配置できます。
CATALINA_OPTS="-Dspring.profiles.active=dev"
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);
}
}
System.setProperty("spring.profiles.active", "dev");
SpringApplication app =new SpringApplication(Application.class);
Properties props = new Properties();
props.put("AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAM", "dev");
app.setDefaultProperties(props);
app.run(args);
このコードはシステムプロパティを設定しないため、より良い解決策だと思います