apache DatabaseConfiguration中的动态重新加载

时间:2010-08-11 12:01:03

标签: java apache-commons apache-commons-config

是否有人为apache commons数据库配置对象开发了动态重装机制?

2 个答案:

答案 0 :(得分:3)

实际上这不是必需的,因为DatabaseConfiguration不会缓存数据库中的值。每次提取属性时都会执行请求。有一个RFE来缓存值以提高性能,这确实需要重新加载机制。

https://issues.apache.org/jira/browse/CONFIGURATION-180

答案 1 :(得分:0)

apache commons数据库配置不支持缓存。

我扩展DatabaseConfiguration以支持缓存,因此它不会一直打到我的数据库。 至于重新加载,我在需要它的地方实例化我的配置,当我完成它时将它丢弃。

MyConfig cfg = new MyConfig("jdbc/configdatabase");


public class MyConfig extends DatabaseConfiguration {

    private WeakHashMap<String,Object> cache = new WeakHashMap<String,Object>();

    public MyConfig(String datasourceString,String section) throws NamingException {
        this((DataSource) new InitialContext().lookup(datasourceString),section);
    }

    protected MyConfig(DataSource datasource,String section) {
        super(datasource, "COMMON_CONFIG","PROP_SECTION", "PROP_KEY", "PROP_VALUE",section);
    }

    @Override
    public Object getProperty(String key){
        Object cachedValue = cache.get(key);
        if (cachedValue != null){
            return cachedValue;
        }
        Object databaseValue = super.getProperty(key);
        cache.put(key, databaseValue);
        return databaseValue;

    }
}