java.util.ResourceBundleでXXX.propertiesを読む
ResourceBundleはクラスパスにあるプロパティファイルなどを読むことができる。
しかし注意したいのは、クラスパスにないと読めないということ。
eclipseで開発しているときは問題なく動いたのに、サーバにデプロイするとパスが通ってなくて読めてない!なてこともある。
またJavaの特徴でもある「環境依存しない」というものを崩してしまう可能性も含んでいると思っている。
また、Webサービスなどでこれを使うとサービスの再起動をしないと再取得できない場合があるということ。
googleで"ResourceBundle キャッシュ"と検索すると既に検証しているサイトが見つかると思うが、このクラスはキャッシュするのである。
つまりWebサービスなどのインスタンスが残るサービスの場合、もしプロパティファイルを編集して保存したとしても、その変更がサービスに反映されない!
# Tomcatで作っている場合はrestartが容易だと思っているが、restartするのが大変なパッケージもある。。。
と万能とは言えないものだが、簡単に使えるために小規模のサービスならば使ってみるのもいいかもしれない。
固定の"clashm45.properties"を読むクラスを作ってみた。
このようにStringを返すメソッド、Longを返すメソッド、またパス形式にして返したりすると楽な場合も多い。
# 今回のセパレータには"\\"を使ったが、"/"でももちろんいいはずだ。
##「File.separatorChar使えよ」と言いたい人もいるかも知れないが、まれにそれが面倒なことを起こす場合もある。("まれに"だとは思うが)
package utility; import java.util.ResourceBundle; /** * プロパティファイルの使用をサポートする. */ public class PropertyUtil{ private static final String propertyFilePath = "clashm45"; private static ResourceBundle bundle = ResourceBundle.getBundle(propertyFilePath); /** * String型で返す. * @param key * @return String */ public static String getString(PropertySet key){ return getValue(key); } /** * Long型で返す. * @param key * @return Long */ public static Long getLong(PropertySet key){ return Long.parseLong(getValue(key)); } /** * ディレクトリパス形式で返します. * @param key * @return String */ public static String getPath(PropertySet key){ String value = getValue(key); if(value.lastIndexOf("\\") != -1){ return value + "\\"; } return value; } private static String getValue(PropertySet key){ return bundle.getString(key.getKey()); } }