2015年6月11日木曜日

Spring でプロパティファイルを参照する方法

概要

過去の記事でEclipse + Springでサンプルプロジェクトが動作するところまで紹介しました
今回はそのサンプルプロジェクトを使ってプロパティファイルを参照する方法を試してみました

環境

  • Mac OS X 10.10.3
  • Eclipse Luna 4.4.1
  • Spring Framework 4.1.6
    ※それ以外のバージョンは過去の記事に書いてあるバージョンと同じです

サンプルプロジェクト作成

過去の記事を参考に作成してください
Spring Framework のバージョンが最新でない場合は pom.xml 「org.springframework-version」のバージョン記載部分を最新のバージョンに変更してください

プロパティファイルを自動で読み込むための定義を追加

servlet-context.xml の修正

servlet-context.xmlsrc/main/webapp/WEB-INF/spring/appServlet/servlet-context.xmlにあります
ここにプロパティファイルを読み込むための定義を記載します

<!-- for Properties -->
<beans:bean id="applicationProperties"
  class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <beans:property name="locations">
    <beans:list>
      <beans:value>classpath:application.properties</beans:value>
    </beans:list>
  </beans:property>
</beans:bean>
<beans:bean id="placeHolderConfigurer"
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <beans:property name="location" value="classpath:application.properties" />
</beans:bean>

beans:bean id="applicationProperties" で定義している id は Java 側でプロパティファイルを参照するオブジェクトの変数名と同じである必要があります

<beans:value>classpath:application.properties</beans:value> にプロパティファイルが存在するパスを設定します
この場合はクラスパス上に存在する application.properties を探しにいきます
「./src/main/resources/application.properties」に配置するのであれば上記の設定で読み込むことができます
相対パスや絶対パスでも指定することができるようです

<beans:bean id="placeHolderConfigurer"はプロパティファイルに定義した情報をこの「servlet-context.xml」で読み込むための定義です
例えば application.properties 内で「hoge.value=100」という感じで定義している場合に servlet-context.xml 内で "${hoge.value}" みたいな感じで参照することができます

プロパティファイルの配置

上記の設定の場合は「./src/main/resources/application.properties」に配置すればOKです
プロパティファイルは key=value の形式で1行に1定義していきます
例えばこんな以下のような感じです

  • ./src/main/resources/application.properties
key=value
hoge.value=100

プロパティオブジェクトをクラスで参照する方法

配置したプロパティファイルの値をJava側で参照してみます
クラスの全貌を記載すると無駄な部分が多いので必要な部分に絞って紹介します

  • 必要なクラスのインポート
import java.util.Properties;
import org.springframework.beans.factory.annotation.Autowired;

上記は最低限必要になります

  • プロパティオブジェクト作成
@Autowired
private Properties applicationProperties;

ポイントは@Autowiredです
この Annotation を使うことでプロパティを参照できるオブジェクトを Spring が自動で生成してくれます
メンバ変数として定義すると、クラス内のどこからでも参照できます

上記をプロパティファイルを参照したクラス内で定義してください
準備はこれだけでOKです

動作確認

値を参照してみましょう

System.out.println(applicationProperties.getProperty("hoge.value"));

値を取得する場合はgetPropertyメソッドで参照することが可能です
とりあえず標準出力する一文を記載して「Run on Server」実行してみましょう
適当なリクエストでアクセスして Eclipse のコンソールに出力されることを確認してください

最後に

XMLの定義と Annotation を使うだけで参照できるようになるというのが嬉しいポイントでしょうか
モデルへのデータバインディングとかまでやってくれると嬉しいのですがそこまではやってくれないようです
単純に値を参照したいだけであれば十分使えそうです

0 件のコメント:

コメントを投稿