目次

1. 構成は環境固有である必要があります

構成は環境固有である必要があります-それは単なる現実です。 そうでない場合は、構成ではなく、値をコードにハードコードするだけです。

Springアプリケーションの場合、使用できるソリューションがいくつかあります –単純なソリューションから、非常に柔軟で非常に複雑な代替手段まで。

より一般的で直接的な解決策の1つは、プロパティファイルの柔軟な使用とSpringによって提供されるファーストクラスのプロパティサポートです。

概念実証として、この記事の目的のために、1つの特定のタイプのプロパティであるデータベース構成を見ていきます。 あるタイプのデータベース構成を本番環境に使用し、別のタイプをテストに使用し、さらに別のタイプを開発環境に使用することは完全に理にかなっています。

2. 各環境の.propertiesファイル

ターゲットとする環境を定義することにより、概念実証を開始しましょう。

    • 開発者
    • 演出
    • 製造

720

次に、これらの環境ごとに1つずつ、3つのプロパティファイルを作成しましょう。

  • 永続性-dev.properties
  • 永続性-staging.properties
  • 永続性-production.properties

通常のMavenアプリケーションでは、これらは src / main / resources に存在できますが、どこにいても、アプリケーションのデプロイ時にクラスパス使用可能である必要があります。

重要な補足– すべてのプロパティファイルをバージョン管理下に置くと、構成がはるかに透過的になり、再現性が高まります。 これは、ディスク上のどこかに構成を配置し、Springを単にそれらに向けることとは反対です。

3. 春の構成

Springでは、環境に基づいて正しいファイルを含めます。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.0.xsd">

      <context:property-placeholder
         location="
         classpath*:*persistence-${envTarget}.properties" />

</beans>

もちろん、Java構成でも同じことができます。

@PropertySource({ "classpath:persistence-${envTarget:dev}.properties" })

このアプローチにより、固有の焦点を絞った目的のために複数の*。propertiesファイルを柔軟に使用できます。 たとえば、この場合、永続性Spring構成は永続性プロパティをインポートします。これは完全に理にかなっています。 セキュリティ設定は、セキュリティ関連のプロパティなどをインポートします。

4. 各環境でのプロパティの設定

最後の展開可能な戦争には、すべてのプロパティファイルが含まれます–永続性のために、永続性-*。propertiesの3つのバリアント。 ファイルの名前は実際には異なるため、誤って間違ったファイルが含まれる心配はありません。 envTarget変数を設定して、複数の既存のバリアントから必要なインスタンスを選択します。

envTarget 変数は、OS /環境で設定することも、JVMコマンドラインのパラメーターとして設定することもできます。

-DenvTarget=dev

5. テストとMaven

永続性を有効にする必要がある統合テストの場合–pom.xmlでenvTargetプロパティを設定するだけです。

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
      <systemPropertyVariables>
         <envTarget>h2_test</envTarget>
      </systemPropertyVariables>
   </configuration>
</plugin>

対応するpersistence-h2_test.propertiesファイルをsrc/ test / resources に配置できるため、はテストにのみ使用され、不必要に含まれたりデプロイされたりすることはありません。実行時の戦争で。

6. もっと遠く行く

必要に応じて、このソリューションに追加の柔軟性を組み込む方法はいくつかあります。

そのような方法の1つは、プロパティファイルの名前より複雑なエンコーディングを使用して、それらが使用される環境だけでなく、より多くの情報(永続性プロバイダーなど)も指定することです。 たとえば、次のタイプのプロパティを使用する場合があります: persistence-h2.properties persistence-mysql.properties 、またはさらに具体的には: persistence-dev_h2.properties [ X192X]、 persistence-staging_mysql.properties persistence-production_amazonRDS.properties

このような命名規則の利点は、単なる規則であり、全体的なアプローチに何の変更もありませんが、単に透明性です。 名前を確認するだけで、構成が何を行うかがはるかに明確になります。

  • persistence-dev_h2.properties dev 環境の永続プロバイダーは、軽量のメモリ内H2データベースです。
  • persistence-staging_mysql.properties staging環境の永続プロバイダーはMySQLインスタンスです
  • persistence-production_amazon_rds.propertie product環境の永続プロバイダーはAmazonRDSです

7. 結論

この記事では、Springで環境固有の構成を行うための柔軟なソリューションについて説明します。 プロファイルを使用した代替ソリューションは、ここにあります。

ソリューションの実装は、 GitHubプロジェクトにあります。これはMavenベースのプロジェクトであるため、そのままインポートして実行するのは簡単です。