maven profile動的選択配置ファイル詳細


一、背景
開発過程において、私達のソフトウェアは開発環境、テスト環境、生産環境などの異なる動作環境に直面します。私達のソフトウェアは異なる環境において、データソースの配置、ログファイルの配置、ソフトの実行過程の基本的な配置などがあります。すべて相応の配置書類を修正しなければならないので、このように繰り返し修正して、間違いやすくて、しかも労働力を浪費します。
mavenはこのような問題を簡単に解決する方案を提供しました。profile機能です。
二、profile紹介
profileは、一連の構成情報を定義し、その活性化条件を指定することができます。このように複数のプロファイルを定義し、各プロファイルは異なる活性化条件と構成情報に対応して、異なる環境で異なる構成情報を使用する効果を達成することができる。
profile定義の位置
(1)特定項目に対するプロファイル構成は、本プロジェクトのpom.xmlに定義することができます。以下の例はこのような方式です。
(2)特定のユーザーのprofile構成については、ユーザのsettings.xmlファイルにprofileを定義することができます。このファイルはユーザのホームディレクトリの下の「.m 2」ディレクトリにあります。
(3)グローバルなprofile構成。グローバルprofileは、Mavenインストールディレクトリの「conf/settings.xml」ファイルに定義されています。
三、動的包装の配置
1、プロファイルを配置する
プロジェクトのprofileに以下のprofile構成を追加します。

<profiles>
  <profile>
    <!--        -->
    <id>dev</id>
    <properties>
      <profiles.active>dev</profiles.active>
    </properties>
    <activation>
      <!--            -->
      <activeByDefault>true</activeByDefault>
    </activation>
  </profile>
  <profile>
    <!--      -->
    <id>release</id>
    <properties>
      <profiles.active>release</profiles.active>
    </properties>
  </profile>
  <profile>
    <!--      -->
    <id>beta</id>
    <properties>
      <profiles.active>beta</profiles.active>
    </properties>
  </profile>
</profiles> 
ここでは三つの環境が定義されています。それぞれdev(開発環境)、beta(テスト環境)、release(リリース環境)で、開発環境はデフォルトでアクティブになります。このようにプロファイルを指定しない場合はデフォルトで開発環境になります。また、packageの場合はどの開発環境を選択するかを指定します。詳細は後に参照してください。
2、プロファイル
異なる環境に対して異なるプロファイルを定義しました。ファイルディレクトリは以下の通りです。

図に示すように、開発環境、テスト環境、生産環境のプロファイルは、それぞれSrc/main/resourceディレクトリの下のconfigフォルダに配置されています。
configの下に複数の環境の配置ファイルがあります。名前はappication-環境名.propertiesです。
処理プロセス:
1)profileを通じてあなたが使う環境を選択します。
2)packageコマンドを通じて、環境変数をappication.propertiesに注入する(このように、共通の環境変数は各環境のプロファイルに配置しなくてもよい)
3)プロジェクトにapple.xmlファイルを読み込む
プロファイルを読み込み

<context:property-placeholder location="classpath:application.properties"/>
例:
appication-beta.propertiesファイルには以下のような部分があります。

env.datasource.jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true&zeroDateTimeBehavior=round
env.datasource.username=root
env.datasource.password=12233
appication.propertiesには、上の内容を注入するためのものがあります。

datasource.jdbcUrl=${env.datasource.jdbcUrl}
datasource.username=${env.datasource.username}
datasource.password=${env.datasource.password}
3、mavenリソースプラグインの配置
pom.xmlのbuild結点において、リソースファイルを配置する位置は、以下の通りです。

<build>
    <finalName>seewo-admin</finalName>
    <!--              -->
    <filters>
      <filter>src/main/resources/config/application-${env}.properties</filter>
    </filters>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
ここでは一つのパラメータtrueを注意して、必ずtrueに設定してください。これでenvディレクトリの下の構成ファイルを元のものに上書きします。
4、profileをアクティブにする
1)デフォルトのアクティブ化
上記のプロファイル構成で設定されているデフォルトのアクティブ環境です。下に示すように

<activeByDefault>true</activeByDefault> 
2)-Pパラメータを使用してプロファイルをアクティブにすることを示します。
私たちは、Maven操作を行うときに、-Pパラメータ表示の指定された現在アクティブ化されているのはどのprofileですか?例えば、プロジェクトを梱包する時にIDを使ってdevのprofileを使う必要があります。

mvn package CPdev
ここでdevがsettings.xmlにdevタグを使用してアクティブ状態にあるprofileであると仮定すると、「-P!」プロfileは現在の操作でプロfileがアクティブにならないことを表しています。
5、呼び出し

private Logger logger = LogManager.getLogger(MyApp.class.getName());
他の使用はロゴ4 jと同じです。
四、出会った穴
appication.xmlファイルに@キーワードが表示されません。たとえあなたがコメントしてもだめです。@が現れたら、その後の環境変数はすべて注入されません。
例えば:

以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。