XML cacheManger bean:多个 CachingProviders 错误
XML cacheManger bean : Multiple CachingProviders error
你好,我曾经使用一个缓存提供程序来管理我的缓存,但现在我必须使用多个
我在初始化我的 bean 时遇到了一些问题,实际上我得到了这个错误:
是否可以为我的 XML bean 定义一个特定的提供者?
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jCacheManager' defined in class path resource [default-beans.xml]: Invocation of init method failed; nested exception is javax.cache.CacheException: Multiple CachingProviders have been configured when only a single CachingProvider is expected
我的豆子
<bean id="jCacheManager" class="org.springframework.cache.jcache.JCacheManagerFactoryBean">
<property name="cacheManagerUri" value="classpath:ehcache.xml"/>
</bean>
<bean id="DefaultCacheManager" class="org.springframework.cache.jcache.JCacheCacheManager" scope = "singleton">
<property name="cacheManager" ref="jCacheManager" />
</bean>
如果您想使用多个缓存提供程序,那么您应该使用基于注释的缓存配置,这将减少您的工作!您需要做的就是:
启用基于注释的缓存配置。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache https://www.springframework.org/schema/cache/spring-cache.xsd">
<cache:annotation-driven/> //This will allow you to use @Cache annotations.
</beans>
现在,您已经在您的应用程序中启用了基于注解的缓存服务。
在 class 中,假设您有三个方法,并且您希望将每个方法缓存在不同的缓存提供程序中。
@Cacheable(cacheNames="name", cacheManager="yourProvider")
public Object firstMethod(){
//You can enter different cache provider configured in each cache manager for each method.
}
<bean id="CacheProvider"
class="org.ehcache.jsr107.EhcacheCachingProvider" />
<bean id="CacheManager"
class="org.ehcache.jsr107.Eh107CacheManager"
factory-bean="CacheProvider" factory-method="getCacheManager">
<constructor-arg
value='#{ new org.springframework.core.io.ClassPathResource("/ehcache.xml").getURI()}' />
<constructor-arg
value="#{ getClass().getClassLoader()}" />
</bean>
你好,我曾经使用一个缓存提供程序来管理我的缓存,但现在我必须使用多个 我在初始化我的 bean 时遇到了一些问题,实际上我得到了这个错误:
是否可以为我的 XML bean 定义一个特定的提供者?
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jCacheManager' defined in class path resource [default-beans.xml]: Invocation of init method failed; nested exception is javax.cache.CacheException: Multiple CachingProviders have been configured when only a single CachingProvider is expected
我的豆子
<bean id="jCacheManager" class="org.springframework.cache.jcache.JCacheManagerFactoryBean">
<property name="cacheManagerUri" value="classpath:ehcache.xml"/>
</bean>
<bean id="DefaultCacheManager" class="org.springframework.cache.jcache.JCacheCacheManager" scope = "singleton">
<property name="cacheManager" ref="jCacheManager" />
</bean>
如果您想使用多个缓存提供程序,那么您应该使用基于注释的缓存配置,这将减少您的工作!您需要做的就是:
启用基于注释的缓存配置。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache https://www.springframework.org/schema/cache/spring-cache.xsd">
<cache:annotation-driven/> //This will allow you to use @Cache annotations.
</beans>
现在,您已经在您的应用程序中启用了基于注解的缓存服务。
在 class 中,假设您有三个方法,并且您希望将每个方法缓存在不同的缓存提供程序中。
@Cacheable(cacheNames="name", cacheManager="yourProvider")
public Object firstMethod(){
//You can enter different cache provider configured in each cache manager for each method.
}
<bean id="CacheProvider"
class="org.ehcache.jsr107.EhcacheCachingProvider" />
<bean id="CacheManager"
class="org.ehcache.jsr107.Eh107CacheManager"
factory-bean="CacheProvider" factory-method="getCacheManager">
<constructor-arg
value='#{ new org.springframework.core.io.ClassPathResource("/ehcache.xml").getURI()}' />
<constructor-arg
value="#{ getClass().getClassLoader()}" />
</bean>