如何加载属性文件一次并在整个java应用程序中使用它

时间:2016-05-03 07:51:14

标签: java spring properties

我有一个场景,我正在尝试在我的应用程序中实现错误代码机制。这是我目前所遵循的方法。

    Properties prop = new Properties();
            InputStream input = null;

            try {

                String filename = "ErrorCode.properties";
                input = getClass().getClassLoader().getResourceAsStream(filename);
                if (input == null) {
                    log.debug("Sorry, unable to find " + filename);
                    return null;
                }

                prop.load(input);

                Enumeration<?> e = prop.propertyNames();
                while (e.hasMoreElements()) {
                    String key = (String) e.nextElement();
                    String value = prop.getProperty(key);
                    log.debug("Key : " + key + ", Value : " + value);

                }

但是我需要在很多不同的类中使用错误代码,而且我不想在不同的类中一直编写上面的代码。

是否有其他方法初始化属性文件一次并在类中的任何位置使用它。

我如何实现这一目标?

有哪些不同的实现方法?

我正在使用春天,有什么方法可以在春天实现这个目标吗?

我对任何其他机制而不是属性文件都是开放的。

2 个答案:

答案 0 :(得分:0)

为什么不直接实现单独的单例类,如“ErrorCodes”,在对象创建期间初始化属性文件一次,然后通过getter检索文件?

答案 1 :(得分:0)

定义Constants.java并添加要在整个应用程序运行时使用的属性。这些属性可以被其他类使用,不需要为每个类定义进行初始化。

public class Constants {
public static String[] tableAndColumnNames;
public static String[] getTableAndColumnNames() {
        return tableAndColumnNames;
    }
    public static void setTableAndColumnNames(String tableNames) {
        Constants.tableAndColumnNames = tableNames.split(";");
    }

public static String getDB() {
        return DB;
    }
public static final String HSQLBD = "HSQLDB";
    public static final String ORACLE = "ORACLE";
public static String DB;
    public static void setDB(int dB) {
        if (dB == 0) {
            Constants.DB = HSQLBD;
        } else {
            Constants.DB = ORACLE;
        }
    }
}

在应用程序启动时加载这些属性。当您加载属性时,只需执行下面的设置常量

public static void loadProperties() {
Properties property = new Properties();
            InputStream input = CommonUtilities.class.getResourceAsStream("/DB.properties");
            property.load(input);
            Constants.setDB(Integer.parseInt(prop.getProperty("DB")));
Constants.setTableAndColumnNames(property.getProperty("tableAndColumnNames"));
}

在初始化属性之后,只需引用Constant类就可以在程序的任何一点使用它。像

public void someOtherClass()

public static void main(String[] args) {
    if(this.DB.equals(Constans.getDB()) // will return the DB from the properties class
    // no need to initialize properties again in every class.
}

希望这有帮助。