Springでプロパティファイルから値を取得する

※内容に不正確な部分があったため、修正しました(7月14日)

Bean定義に値を直接書くのではなく外部のプロパティファイルから取得したい、ついでに設定ファイルからBean定義もなくしたいという場合。
方法は色々あるのでしょうけど、とりあえず設定追加して@Value("${duration.start}")とか@Value("#{duration.start}")とすると取れるみたい。

例えば以下のように設定値を取得するためのBeanを用意します。

@Configuration
public class DurationConfig {

	// 開始年月日
	@Value("${duration.start}")
	private String start;

	// 終了年月日
	@Value("#{durationProps.end}")
	private String end;

	public String getStart() {
		return start;
	}

	public String getEnd() {
		return end;
	}
}

設定ファイルには以下の設定を追加します。
追記:値が取得できない場合、も追加してみてください。)

<!-- PropertyPlaceholderConfigurer / "${props.name}"でアクセス -->
<!-- locationに渡す値を,で区切って複数ファイルから読み込み可能 -->
<context:property-placeholder location="file:/var/local/imarket/tdnet/spider.properties"/>

<!-- SpEL / "#{id.props-name}"でアクセス -->
<!-- idを変えて複数ファイルから読み込み可能 -->
<util:properties id="durationProps" location="file:/var/local/imarket/tdnet/spider.properties"/>

値を読み込むプロパティファイルです。

duration.start=2012/7/7
end=2012/7/8

"${}"でも"#{}"でも好みの方を使えばいいのかなと思いますが、"${}"の場合という設定がなくてもエラーにはならないようです。ただ、値が取得出来ず別のエラーが出るかもしれません。

今回は取り上げませんが、@PropertySource + Environment.getProperty("hoge")って方法もあるみたいですね。