0

アプリケーションの構成パラメーターを宣言するために、文字列と整数の定数のファイルを維持する必要があります。static finalパフォーマンスを向上させるために、単純な Java クラスで定数として宣言し ました。しかし、今では、そのような構成ファイルを複数持つこともできるはずであり、ある構成ファイルの使用から別の構成ファイルへの使用を簡単に切り替えることができる必要があることに気付きました。現在、次のようなファイルがあります。

public final class Config {
    public static final String A1="...";
    public static final String A2="...";
           ...
    public static final String AN="...";

}

任意の構成パラメーターを使用するには、次のように使用します。Config.A1

これらのパラメーターはアプリケーションで頻繁に使用されるため、(getter メソッドではなく) フィールドに直接アクセスしてパフォーマンスを向上させたいと考えていました。

しかし、そのような複数の構成ファイルを維持し、ある構成ファイルから別の構成ファイルに簡単に切り替えるにはどうすればよいでしょうか?

4

2 に答える 2

1
public final class Config {
    public static final String A1;
    public static final String A2;
    ...
    public static final String AN;

    static
    {
        Properties props = new Properties ();
        try
        {
            props.load (new FileInputStream (System.getProperty ("config.file")));
        }
        catch (IOException ex)
        {
            throw new RuntimeException (ex);
        }
        A1 = props.getProperty ("A1");
        A2 = props.getProperty ("A2");
        ...
        AN = props.getProperty ("AN");
    }
}

次に、システム プロパティconfig.fileを使用して、使用する構成ファイルを指定できます。

于 2013-03-04T09:31:52.733 に答える
0

プロパティ ファイルを使用します。どのプロパティ ファイルを使用するかをシステム プロパティに格納します。

これは、その方法の例です。静的メソッドの代わりにシングルトンを使用する必要があり、プロパティ ファイルを毎回ロードするのではなく、ResourceBundle をロードしたままにする必要があります。これはほんの一例です。

import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class Config {

    //Stores the currently used property file
    private static String route;

    public static String getRoute() {
        return route;
    }

    public static void setRoute(String route) {
        this.route = route;
    }

    //Read a value from a properties file.
    //Mikhail Vladimirov wrote another way of doing it, so this is just an example of another way of doing it.
    private static String fetchTextFrom(String key, String route) {
        String text = null;
        try {
            ResourceBundle bundle = ResourceBundle.getBundle(route);
            text = bundle.getString(key);
        } catch (MissingResourceException mre) {
            text = key;
        }
        return text;
    }

    //Read a value from the current properties file
    public static String fetchText(String key) {
        return fetchTextFrom(key, getRoute());
    }
}
于 2013-03-04T09:48:55.263 に答える