0

私が取り組んでいるアプリケーションには、XML ベースの Spring 構成 (フレームワーク バージョン: 4.1.7.RELEASE) があります。

プロファイルが指定されている場合、特定の Bean をインスタンス化する必要があるため、次を my に追加しましたweb.xml

 <servlet>
        <servlet-name>my-app</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
<!-- This part is new -->
        <init-param>
            <param-name>spring.profiles.active</param-name>
            <param-value>${spring.profile}</param-value>
        </init-param>
<!-- End of newly-added part -->
        <load-on-startup>1</load-on-startup>
    </servlet>

spring.profile選択された Maven プロファイルに基づいて、Maven pom.xml で設定されたプロパティです。

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <spring.profile>development</spring.profile>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <spring.profile>production</spring.profile>
        </properties>
    </profile>
</profiles>

maven-war選択した Maven プロファイルに基づいてプレースホルダーが適切な値に置き換えられるため、プラグインでフィルタリングを有効にしました。これは期待どおりに機能します。したがって、Maven が関与する部分はクリアされ、正常に動作します。

ただし、Environment インスタンスを挿入しようとすると、アクティブなプロファイル リストが空になります。

@Autowired private Environment env;
...
log.info(env.getActiveProfiles().toString());

servletConfigInitParamsプロパティ ソースのリストに が表示されますがEnvironment、 myinit-paramは単に無視されているようです。

2 つの Maven プロファイルで実際のシステム プロパティを提供し、それらのセットで実行することで、Spring プロファイルを設定することができましたが、これは運用環境で実行可能なソリューションではなく、コマンド ラインから提供することもできません。

誰が私が間違っているのか教えてもらえますか?

4

0 に答える 0