【Maven】profilesを使って、環境毎に異なる設定値(propertyファイル)を変更する方法

maven

DBの接続先など、サーバの環境毎で設定値を変更したい場合の対応方法を紹介します。

以前当ブログでも紹介しました、「springのDB接続方法」でも、設定値を変更する方法は非常に有効に使えます。

[スポンサーリンク]

サーバの環境毎に動的に値を変える方法ですが、デフォルト値を設定することも可能です。
Eclipseで動作させる時は、デフォルト値が有効となります。

POM.xmlの設定方法

profilesの設定と、buildの設定の2箇所が必要となります。

<project>
・
・
・
    <profiles>
        <profile>
            <id>Local</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <jdbc.url>jdbc:mysql://111.111.11.11:3306/test</jdbc.url>
                <jdbc.username>XXX</jdbc.username>
                <jdbc.password>XXXXXXXXX</jdbc.password>
            </properties>
        </profile>
        <profile>
            <id>STG</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <jdbc.url>jdbc:mysql://111.111.11.11:3306/test</jdbc.url>
                <jdbc.username>XXX</jdbc.username>
                <jdbc.password>XXXXXXXXX</jdbc.password>
            </properties>
        </profile>
    </profiles>
・
・
・
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

解説

8行目のactiveByDefaultはデフォルト値を決定しています。サンプルを例にすると、id「Local」がデフォルト値となります。

35行目のdirectoryで、値を置き換える対象のプロパティファイルを設定しています。

プロパティファイルの設定方法

POM.xmlのproperties値を反映するには、${XXX}を使って、値を動的に変更させます。
以下はプロパティファイルの例です。

jdbc.driverClassName=org.gjt.mm.mysql.Driver
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}

さいごに

環境に依存する値は、profilesは必ず使うようにしましょう。
たとえ、環境が1つしかなくても、環境に依存する値は外出しするクセをつけましょう。

Mavenを使っているプロジェクトであれば、profilesは高い確率で使われているように感じます。
もし使っていないようであれば、すぐに導入することをおススメします!
それでは!