はじめに
propertiesファイルを配置する際、
Webアプリケーションでは以下のような事例が多いかもしれません。
コンテキストパス/WEB-INF/classes/foo.properties
テスト環境、本番環境で内容の異なるpropertiesファイルを配置したい場合、上記の例では何かと面倒が増えます。
jarファイルで配置する際にはテスト用と本番用とでjarファイルを作り直す必要がありますし…。
こういったケースではアプリケーション配布時にpropertiesファイルを含めないようにし、
任意の場所(=クラスパス外)に配置したpropertiesファイルを読み込むようにして解決しています。
事前に準備する外部ライブラリ等はありません。
読み込むpropertiesは以下のファイルを使います。
/var/taro/conf/foo.properties
key1=value1 key2=value2 key3=value3
実装例
サンプルでは、動作確認しやすいようにmainメソッドで実行できるようにしてあります。
ResourceBundleTest.java
import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.Enumeration; import java.util.Locale; import java.util.ResourceBundle; /** * * @author tool-taro.com */ public class ResourceBundleTest { public static void main(String[] args) throws MalformedURLException { //propertiesファイル配置ディレクトリ String dir = "/var/taro/conf"; //propertiesファイル名(.propertiesは不要) String source = "foo"; //取得処理 URLClassLoader urlLoader = new URLClassLoader(new URL[]{new File(dir).toURI().toURL()}); ResourceBundle bundle = ResourceBundle.getBundle(source, Locale.getDefault(), urlLoader); Enumeration keys = bundle.getKeys(); String key, value; while (keys.hasMoreElements()) { key = (String) keys.nextElement(); value = bundle.getString(key); if (value != null) { //標準出力 System.out.format("%1$s=%2$s\n", key, value); } } } }
動作確認
$ javac ResourceBundleTest.java $ java ResourceBundleTest $ key1=value1 key2=value2 key3=value3
環境
- 開発
- Windows 10 Pro
- JDK 1.8.0_74
- NetBeans IDE 8.1
- 動作検証
- CentOS Linux release 7.2
- JDK 1.8.0_74
Webツールも公開しています。
Web便利ツール@ツールタロウ