7

ディレクトリにMavensettings.xmlファイルがあります。~/.m2次のようになります。

<settings>
    <profiles>
        <profile>
            <id>mike</id>
            <properties>
                <db.driver>org.postgresql.Driver</db.driver>
                <db.type>postgresql</db.type>
                <db.host>localhost</db.host>
                <db.port>5432</db.port>
                <db.url>jdbc:${db.type}://${db.host}:${db.port}/dbname</db.url>
            </properties>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>mike</activeProfile>
    </activeProfiles>
    <servers>
        <server>
            <id>server_id</id>
            <username>mike</username>
            <password>{some_encrypted_password}</password>
        </server>
    </servers>
</settings>

これらのプロパティを 2 回使用したい

  • Maven のintegration-testフェーズに入ったら、データベースをセットアップして破棄します。Maven フィルタリングを使用すると、これは完全に機能します。
  • servlet-context.xml2 回目は、Spring アプリケーションを実行するときです。これは、 Maven のresources:resourcesフェーズでこれらのプロパティをファイルに置き換える必要があることを意味します。settings.xmlのようなの上部セクションにあるプロパティの場合${db.url}、これは正常に機能します。 データベースのユーザー名と (復号化された) パスワードを Springファイルに置き換える方法がわかりません。servlet-context.xml

私のファイルの関連部分はservlet-context.xml次のようになります。

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName"><value>${db.driver}</value></property>
    <property name="url"><value>${db.url}</value></property>
    <property name="username"><value>${username}</value></property>
    <property name="password"><value>${password}</value></property>
</bean>

ここでの最終目標は、各開発者が独自の Maven 設定 (および統合テスト用の独自のマシン上のデータベース) を持つことです...そして、Jenkins サーバー上で同様の設定を行います。共通のユーザー名/パスワードなどを共有したくありません。

4

3 に答える 3

2

Maven War Plugin の設定により Web リソースをフィルタリングする方法があります。公式プラグインのドキュメントからのスニペットについては、これを見てください。

ところで、ビルド時に事実上のランタイム構成を提供するために、このフィルタリング ベースの方法を再検討することを強くお勧めします。別の環境用にパッケージを準備する (またはパッケージの内容を編集する)ために、同じコードを再構築する必要があることに注意してください。これにはアプリケーションサーバーの特定のものを使用できます(少なくともJBossには1つがあります)、またはAFAIRもこのように構成できるSpringを使用できます。

于 2012-05-24T06:22:25.377 に答える
1

途中でプロパティファイルを使用することをお勧めします。つまり、Springアプリケーションはを使用してプロパティファイルからプロパティ値をロードしcontext:property-placeholder、Mavenはフィルタリングを使用してsettings.xmlの値を使用して${...}変数を置き換えるものになります。

あなたのプロパティファイル:

db.driver=${db.driver}
db.url=${db.url}
username=${username}
password=${password}

あなたのservlet-context.xmlファイル

<context:property-placeholder location="classpath:your-property-file.properties" />

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName"><value>${db.driver}</value></property>
    <property name="url"><value>${db.url}</value></property>
    <property name="username"><value>${username}</value></property>
    <property name="password"><value>${password}</value></property>
</bean>

pom.xmlで

<resources>
    ...
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
    ...
</resources>
于 2012-05-24T10:11:40.560 に答える
0

試したことはありませんが、このMaven wiki pageに従って、接頭辞をsettings.xml使用してプロパティを参照できるはずです。settings.したがって${settings.servers.server.username}、理想的にはusernamein を返す必要がありsettings.xmlます。

于 2012-05-24T11:22:24.000 に答える