Springでのプロジェクト構成

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

**

設定は環境に固有のものである必要があります - それは単なる実情です。

それが当てはまらない場合、それは構成ではなく、コード内の値をハードコードするだけです。

  • Springアプリケーションのためにあなたが使うことができる** いくつかの解決策があります - シンプルな解決策からずっと柔軟で非常に複雑な代替案まで。

より一般的で直接的な解決策の1つは、 propertiesファイル とリンク:/properties-with-spring[Springが提供するファーストクラスのプロパティサポート]の柔軟な使用です。

概念実証として、この記事の目的のために、1つの特定のタイプのプロパティー、つまりデータベース構成に注目します。本番用、テスト用、さらに開発環境用に、ある種類のデータベース構成を使用することは完全に意味があります。

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

**

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

  • 開発者

  • ステージング

  • 生産

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

  • persistence-dev.properties

  • persistence-staging.properties

  • persistence-production.properties

典型的なMavenアプリケーションでは、これらは src/main/resources に存在することができますが、それらがどこにあっても、アプリケーションがデプロイされるときに** クラスパスで利用可能である必要があります。

重要な補足 - ** すべてのプロパティファイルをバージョン管理下に置くことで、設定の透明性と再現性が高まります。

これは、ディスク上のどこかにconfigを配置し、単にそれらを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各環境でプロパティを設定する

最後のデプロイ可能な戦争には、すべてのプロパティファイルが含まれます。ファイルは実際には別の名前が付けられているので、誤って間違ったファイルを含めてしまう心配はありません。 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__に置くことができます。** これはテストにのみ使用され、実行時にwarと共に不必要にインクルードおよびデプロイされないようにするためです。

6. もっと遠く行く

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

そのような方法の1つは、プロパティファイルの名前に** より複雑なエンコーディングを使用することです。プロパティファイルが使用される環境だけでなく、より多くの情報(永続プロバイダなど)も指定します。たとえば、次のような種類のプロパティを使用します。

persistence-h2.properties persistence-mysql.properties 、またはさらに具体的には persistence-dev h2.properties persistence-staging mysql.properties persistence-production amazonRDS.properties__

そのような命名規則の利点 - そしてそれは全体的なアプローチにおいて何も変わらないので これは 単なる規則** です - は単に透明性です。名前を見るだけで設定が何をするのかがより明確になりました。

  • persistence-dev h2.properties__ :永続化プロバイダ

dev environmentは軽量のインメモリH2データベースです。 persistence-staging mysql.properties__ ** :永続化プロバイダ

staging 環境はMySQLインスタンスです persistence-production amazon rds.propertie ** :永続性

production 環境のプロバイダーはAmazon RDSです。

7. 結論

この記事では、Springで環境固有の設定を行うための柔軟なソリューションについて説明します。プロファイルhttp://maciejwalkowiak.pl/blog/2012/03/27/spring-3-1-profiles-and-tomcat-configuration/を使用する別の解決策は[ここで見つけることができます]。

このソリューションの実装はhttps://github.com/eugenp/tutorials/tree/master/spring-rest-full[GitHubプロジェクト]にあります - これはMavenベースのプロジェクトなので、簡単に実行できます。そのままインポートして実行します。