2010-08-11 4 views

답변

3

DatabaseConfiguration이 데이터베이스의 값을 캐시하지 않기 때문에 실제로 이것은 필요하지 않습니다. 속성을 가져올 때마다 요청이 수행됩니다. 향상된 성능을 위해 값을 캐시하는 RFE가 있으며 실제로 리로드 메커니즘이 필요합니다.

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

+0

나는이 티켓이 '05 년에 어떻게 소급되었는지를 알고 있습니다. 아직 8 년 후 ... :) –

+0

어떤 도움을 환영합니다 :) –

+0

:) 사실은 당분간 캐시 제공자 (ehcache)로이 클래스를 래핑했습니다. 그러나 이것은 lib에 의해 제공되는 것이 굉장 할 것입니다! –

0

아파치 평민 데이터베이스 구성은 캐싱을 지원하지 않습니다.

캐싱을 지원하도록 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; 

    } 
}