web-dev-qa-db-ja.com

Spring 3.1のデフォルトプロファイル

私のアプリケーションでは、@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"を設定することはオプションではありません。

98
Michał Margiel

私の経験は

@Profile("default")

beanは、他のプロファイルが識別されない場合にのみコンテキストに追加されます。別のプロファイルを渡した場合、例えば-Dspring.profiles.active="demo"、このプロファイルは無視されます。

66
Paul Philion

運用環境を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
110
andih

また、PRODプロファイルの削除を検討し、@ Profile( "!demo")を使用することもできます。

5
blacelle

同じ問題がありますが、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));
    }
}
5
mcoolive

@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>
3
Jakub Kubrynski

Springは、どのプロファイルがアクティブであるかを判断するときに、2つの個別のプロパティを提供します。

  • spring.profiles.active

そして

  • spring.profiles.default

spring.profiles.activeが設定されている場合、その値はアクティブなプロファイルを決定します。ただし、spring.profiles.activeが設定されていない場合、Springはspring.profiles.default.を探します

spring.profiles.activespring.profiles.defaultも設定されていない場合、アクティブなプロファイルはなく、プロファイル内にあると定義されていないBeanのみが作成されます。プロファイルを指定しないBeanは、 defaultプロファイル。