100

私のアプリケーションでは、とで注釈が付けられたBeanが@Profile("prod")あり@Profile("demo")ます。1つ目は、ご想像のとおり、本番DBに接続するBeanで使用され、2つ目HashMapは、開発を高速化するために、偽のDB(またはその他)を使用するBeanに注釈を付けます。

私が欲しいのは、「 something-else"prod" 」によってオーバーライドされない場合に常に使用されるデフォルトのプロファイル()です。

完璧なのは私の中にあること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"することはオプションではありません。

4

7 に答える 7

111

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
于 2012-04-06T09:50:18.613 に答える
68

私の経験では、

@Profile("default")

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

于 2012-08-28T21:50:49.690 に答える
6

同じ問題がありますが、サーブレットコンテキストをプログラムで構成するためにWebApplicationInitializerを使用しています(サーブレット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));
    }
}
于 2015-12-02T11:08:09.907 に答える
5

PRODプロファイルを削除して、@ Profile( "!demo")を使用することも検討してください。

于 2014-05-05T11:31:52.720 に答える
3

すでに投稿されているデフォルトの本番プロファイルの設定について@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>
于 2014-01-11T20:22:43.473 に答える
3

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ます。

于 2017-01-26T15:06:09.133 に答える
-1

web.xmlをフィルター処理されたリソースとしてセットアップし、この値をmavenプロファイル設定からmavenで埋めることができます。

pomですべてのリソースをフィルタリングします($ {}マークがない場合はtahtを実行できます)

<webResources>
    <resource>
        <directory>src/main/webapp</directory>
        <filtering>true</filtering>
    </resource>
</webResources>

web.xmlに入れます

<context-param>
     <param-name>spring.profiles.active</param-name>
     <param-value>${spring.prfile}</param-value>
</context-param>

pomでMavenプロファイルを作成します

<profiles>
    <profile>
        <id>DEFAULT</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <spring.profile>prod</spring.profile>
        </properties>
    <profile>
    <profile>
        <id>DEMO</id>
        <properties>
            <spring.profile>demo</spring.profile>
        </properties>
    <profile>
</profiles>

今、あなたは使用することができます

mvn jetty:run -P DEMO

または単に-P DEMO任意のMavenコマンドを使用します

于 2012-04-06T10:05:56.590 に答える