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>