私のアプリケーションでは、@Profile("prod")
および@Profile("demo")
アノテーションが付けられたBeanがあります。推測できるように、最初のものは本番DBに接続するBeanで使用され、2つ目は開発を高速化するために何らかのDB(HashMap
など)を使用するBeanに注釈を付けます。
私が持ちたいのは、デフォルトのプロファイル("prod"
)で、「something-else」で上書きされない場合に常に使用されます。
完璧なのは、私のweb.xml
:
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>prod</param-value>
</context-param>
そして、これを-Dspring.profiles.active="demo"
でオーバーライドして、私ができるようにします:
mvn jetty:run -Dspring.profiles.active="demo".
しかし、残念ながらこれは機能しません。どうすればそれを達成できますか?すべての環境で-Dspring.profiles.active="prod"
を設定することはオプションではありません。
私の経験は
@Profile("default")
beanは、他のプロファイルが識別されない場合にのみコンテキストに追加されます。別のプロファイルを渡した場合、例えば-Dspring.profiles.active="demo"
、このプロファイルは無視されます。
運用環境をweb.xmlのデフォルトプロファイルとして定義します
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>prod</param-value>
</context-param>
別のプロファイルを使用する場合は、システムプロパティとして渡します
mvn -Dspring.profiles.active="demo" jetty:run
また、PRODプロファイルの削除を検討し、@ Profile( "!demo")を使用することもできます。
同じ問題がありますが、ServletContextをプログラムで構成するために WebApplicationInitializer を使用します(Servlet 3.0+)。だから私は次のことをします:
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext sc) throws ServletException {
// Create the 'root' Spring application context
final AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
// Default active profiles can be overridden by the environment variable 'SPRING_PROFILES_ACTIVE'
rootContext.getEnvironment().setDefaultProfiles("prod");
rootContext.register(AppConfig.class);
// Manage the lifecycle of the root application context
sc.addListener(new ContextLoaderListener(rootContext));
}
}
@andihに既に投稿されているデフォルトのプロダクションプロファイルの設定について
Maven jettyプラグインのデフォルトプロファイルを設定する最も簡単な方法は、プラグイン構成に以下の要素を含めることです。
<plugin>
<groupId>org.Eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<systemProperties>
<systemProperty>
<name>spring.profiles.active</name>
<value>demo</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
Springは、どのプロファイルがアクティブであるかを判断するときに、2つの個別のプロパティを提供します。
spring.profiles.active
そして
spring.profiles.default
spring.profiles.active
が設定されている場合、その値はアクティブなプロファイルを決定します。ただし、spring.profiles.active
が設定されていない場合、Springはspring.profiles.default.
を探します
spring.profiles.active
もspring.profiles.default
も設定されていない場合、アクティブなプロファイルはなく、プロファイル内にあると定義されていないBeanのみが作成されます。プロファイルを指定しないBeanは、 default
プロファイル。