目次
1.概要
今回は、アプリケーションのエラーメッセージプロパティファイルを読み込みする際に、一度読み込めばどこでも使用できるようにPropertiesLoderクラスを実装したかったのでシングルトン化を検討して実装してみた。
参考にしたサイトは以下
2.サンプルコード
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* .properties形式のファイル読込処理を管理する
*/
public class SingletonPropertiesLoader {
/** プロパティインスタンス管理マップ */
private static Map<String, Object> map = new HashMap<String, Object>();;
/** ロガー */
private static final Logger LOGGER = LoggerFactory.getLogger("SingletonPropertiesLoader.class");
/** Propertiesを取得する */
public static Properties getProperties(String filePath) {
Properties prop = (Properties) map.get(filePath);
if (prop != null) {
return prop;
}
// 【複数スレッド対応】
// ※複数スレッドの場合、
// ここに処理がきた場合に別スレッドでファイルを読み込んでいる可能性があるため、
// 同期して再確認。
synchronized (SingletonPropertiesLoader.class) {
prop = (Properties) map.get(filePath);
if (prop != null) {
return prop;
}
}
prop = new Properties();
try {
prop.load(new FileInputStream(filePath));
} catch (FileNotFoundException e) {
//何らかの例外処理
} catch (IOException e) {
//何らかの例外処理
}
map.put(filePath, prop);
return prop;
}
}
3.最後に
プロパティファイルなどは一度読み込めばどこでも使用できるようにしたかったので、
プロダクトコード内がだいぶスッキリした。