7
votes

Contexte de printemps Property-Placeholder EHCache Configuration

J'ai un fichier XML context de printemps avec ce but

Invocation of init method failed; nested exception is net.sf.ehcache.CacheException: Error configuring from input stream. Initial cause was null:149: Could not set attribute "maxElementsInMemory".


0 commentaires

4 Réponses :


3
votes

Ce n'est pas le fonctionnement de l'empereur de propriétéLetLerderConfigurier. Il peut être utilisé pour remplacer les valeurs dans le contexte , mais pas dans des fichiers externes arbitraires. Et cacheconfig.xml est un fichier externe - il est juste d'être passé à la source du cache d'EH.


0 commentaires

2
votes

Si vous utilisez Maven ou ANT, les deux offrent la possibilité de filtrer les jetons dans des fichiers de ressources.

Pour Maven, vous pouvez faire quelque chose comme P>

 cache.maxMemoryElements = 200


1 commentaires

+1, mais une chose importante à garder à l'esprit ici est qu'avec le remplacement des propriétés de fourmi et maven se produisent pendant Build Time par opposition à l'espace réservé à la propriété du printemps où il se produit pendant l'exécution.



12
votes

Votre exemple utilise ehcachemanagerfactorybean Pour exposer une référence au Cachemanager , avec des caches définies dans le fichier externe cacheconfig.xml fichier. AS @ CHSSPLY76 SOITIONNÉE, le résolveur de la propriété Spring ne fonctionne que dans les fichiers de définition de beans de Spring.

Cependant, vous n'avez pas à définir les caches individuels dans le fichier externe, vous pouvez les définir directement dans le fichier de définition de haricot de printemps, en utilisant ehcachefactorybean :

FALLEYBEAN qui crée un nommé Ehcache cache instance ... si le Cache nommée spécifiée n'est pas configuré dans la configuration du cache Descripteur, cet usinebean va construire une instance d'un cache avec le nom fourni et le spécifié propriétés de cache et ajoutez-le à la Cachemanager pour une récupération ultérieure.

En d'autres termes, si vous utilisez ehcachefactorybean Pour faire référence à un cache nommé qui n'est pas déjà défini dans cacheconfig.xml , puis le ressort créera et configurez une nouvelle instance de cache et enregistrez-la avec le Cachemanager au moment de l'exécution. Cela inclut la spécification de choses comme maxelementsinmemory , et comme cela serait spécifié dans le fichier de définition de haricot de printemps, vous bénéficiez d'une prise en charge complète du résolveur de la propriété: xxx p>


2 commentaires

Merci! Cela me fait perdre la bosse que je peux aller au point que je voudrais.


Et si vous voulez configurer quelque chose qui n'est pas un cache? Par exemple, une propriété de CachemanagerpeerListenerFactory?



2
votes

Pour quiconque a besoin de modifier le chemin DiskStore qui ne peut pas être défini comme l'EHCache Javadoc indique que le paramètre DiskStore est ignoré, vous pouvez créer votre propre implémentation d'un EHCACHEMANAGERFFactoryBean, ce qui vous permet d'injecter le chemin de DiskStore; Vous devez essentiellement intercepter la création du Cachemanager et modifier la configuration passée à l'aide de votre propriété DiskStore, par exemple: xxx pré>

la configuration du ressort ressemble alors à ceci: p>

<bean id="cacheManager" class="com.yourcompany.package.MyEhCacheManagerFactoryBean" depends-on="placeholderConfig">
    <property name="diskStorePath" value="${diskstore.path}"/>
    <property name="configLocation" value="classpath:ehcache.xml" />
</bean>


1 commentaires

Juste pour ajouter à cela pour moi un message utile: Si vous avez besoin d'accéder à une propriété JNDI, vous pouvez la définir via: