2010-08-11 7 views

Répondre

3

En fait, cela n'est pas nécessaire car DatabaseConfiguration ne met pas en cache les valeurs de la base de données. Une requête est effectuée chaque fois qu'une propriété est récupérée. Il y a un RFE pour mettre en cache les valeurs pour améliorer les performances, et cela nécessitera en effet un mécanisme de rechargement.

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

+0

J'adore comment ce billet a été déposé en '05. Toujours en attente ... 8 ans plus tard. :) –

+0

Toute aide est la bienvenue :) –

+0

:) En fait, j'ai juste enveloppé cette classe avec un fournisseur de cache (ehcache) pour le moment. Mais ce serait génial d'avoir fourni par le lib! –

0

configuration de base de données communes apache ne prend pas en charge la mise en cache.

J'étends DatabaseConfiguration pour prendre en charge la mise en cache afin qu'elle ne frappe pas tout le temps ma base de données. En ce qui concerne les rechargements, j'instancie ma configuration là où j'en ai besoin et la rejette quand j'en ai fini avec elle.

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; 

    } 
}