4

Web アプリをテスト環境にデプロイする CI 状況をセットアップしています。このテスト環境では、アプリが使用するビジネス オブジェクトを実際のビジネス オブジェクトのモックにしたいと考えています。モックは静的テスト データを返します。これを使用して、UI に対してテストを実行しています。これらのビジネス オブジェクトの依存関係の注入を Spring で制御しています。それだけの価値があるため、これは Struts 2 アプリケーションです。

私の質問はMaven関連だと思います。モックを注入するため、または本物を注入するためにスプリング構成を構築するかどうかを Maven ビルドに決定させる最良の方法は何ですか? これは Maven プロファイルに適していますか? 他の選択肢は?

4

2 に答える 2

3

Spring 自体はプロファイルをサポートしています(3.1 以降を使用している場合)。Web アプリケーションの場合、 context-parameter を使用してweb.xmlでさまざまな環境のアクティブなプロファイルを設定できます。

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>test</param-value>
</context-param>

編集: Maven と Jenkins の場合、次のようにビルド ジョブのパラメーターを設定できるはずです。

まず、 -tags内のpom.xmlに以下を追加して、Maven に xml-resources をフィルター処理させます (この例では、で終わるファイルのみxmlがフィルター処理され、その他はフィルター処理なしで含まれます) 。<build> </build>

    <resources>
        <resource>
            <directory>src/main/webapp</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/webapp</directory>
            <filtering>false</filtering>
            <excludes>
                <exclude>**/*xml</exclude>
            </excludes>
        </resource>
    </resources> 

次に、web.xmlで context-param をパラメータ化します。

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>${env.SPRINGPROFILE}</param-value>
</context-param>

次に、Jenkins でビルド ジョブをパラメーター化して、SPRINGPROFILE に必要な文字列パラメーターを設定します (例: testまたはprod ): https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build

于 2012-10-26T19:47:51.247 に答える
1

Web アプリ アーティファクトのビルドで何かを行うのは、おそらく悪い考えです ( CI/Hudson をサポートする複数の環境 [prod、test、dev] のアーティファクトを生成するための Maven のベスト プラクティス? )。さまざまなメカニズムを使用して、さまざまなコンテキストの Spring インジェクションのさまざまな構成で WAR ファイルを生成できますが、WAR アーティファクトはビルドされるたびに同じである必要があります。

WAR から構成を抽出するために、外部プロパティ ファイルからオーバーライド値を取得する Spring 3 の機能を使用しました。ビジネス オブジェクトのデフォルト値、つまり製品値を定義します。そして、プロパティ ファイルの存在を確認するように Spring を構成します。これは、アプリがテスト環境にあり、モック インジェクションが必要な場合にデプロイするものです。そのプロパティ ファイルが存在する場合は、その値が代わりに挿入されます。これは、Spring 構成ファイルの関連ビットです。

<!-- These are the default values -->
    <util:properties id="defaultBeanClasses">
    <prop key="myManagerA">com.myco.ManagerAImpl</prop>
    <prop key="myManagerB">com.myco.ManagerBImpl</prop>
</util:properties>

<!-- Pull in the mock overrides if they exist. -->
<context:property-placeholder 
    location="file:///my/location/mockBeans.properties"
    ignore-resource-not-found="true"
    properties-ref="defaultBeanClasses"/>

<!-- The beans themselves. -->  
<bean id="managerA" class="${myManagerA}"/>
<bean id="managerB" class="${myManagerB}"/>

外部の「mockBeans.properties」ファイルの内容は次のとおりです。

#Define mock implementations for core managers
myManagerA=com.myco.ManagerAMockImpl
myManagerB=com.myco.ManagerBMockImpl

これはうまく機能します。必要に応じて、mockBeans.properties ファイルを実際の WAR に含めることもできますが、ライブの場所には含めることはできません。次に、テスト環境タスクは、Spring config が指す場所に移動しすぎます。または、モック プロパティをまったく別のプロジェクトに配置することもできます。

于 2012-11-08T20:35:13.683 に答える