サーバーサイドJavaアプリケーションを作るとき、開発環境と本番環境で異なる設定を用いて動かしたいというのはよくあること。
ありがちなソリューションと問題点はこんなかんじ。
1)"なんとか.properties" に書いてアプリケーションと一緒に配置→ jarなりwarなりにパッケージングしてしまうと書き換えられない
2)"なんとか.properties" ファイルをアプリケーションの外に配置→そのファイルの置き場所はどこで設定すんのさ
3)Springの beans.xmlに書く→1)と同じ問題
4)3に加え、PropertyPlaceholderConfigurerで設定を "なんとか.properties"に切り出す→1)と同じ問題
特に2、staticコンストラクタで固定位置のpropertiesファイルを読みに行くような作りになってるBeanとか勘弁してもらえる?(実在した)
というわけで、
5)Java1.4で追加されたプリファレンスAPIで設定の読み書きをする
というのをやってみてもいいだろう。プリファレンスAPIとは、Windowsでいうところのレジストリみたいなものを読み書きできるAPIだ。これだと設定ファイルの置き場所をどこにするかなんていう悩みはなくなるわけね。
Springを使っているなら PropertyPlaceholderConfigurerのかわりに PreferencesPlaceholderConfigurerというのを使えば、${foo.bar}みたいな記述をした際にまずはプリファレンスの foo.barを探し、存在しなければ propertiesファイルに書いてある foo.barを使うといった動作をしてくれる。これならpropertiesファイルに設定を書いてパッケージングしてしまった後でもプリファレンスの編集で設定をオーバーライドできるわけだね。
ところがWindowsのレジストリエディタみたいなものが Java SDKには標準で付属していない。
仕方ないので探してみたら下記のようなものをみつけた。
http://sourceforge.net/projects/prefedit/
prefedit-*.jar(実行可能jar)を起動するとGUIでプリファレンスの編集ができる。