spring XML cacheManger bean:多个缓存提供程序错误

v09wglhw  于 2023-06-21  发布在  Spring
关注(0)|答案(3)|浏览(134)

你好,我曾经使用一个缓存提供程序来管理我缓存,但现在我必须使用多个缓存提供程序,而且我在init我的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>
kq4fsx7k

kq4fsx7k1#

如果你想使用多个缓存提供者,那么你应该使用基于注解的缓存配置,这将减少你的工作!你需要做的就是:

启用基于注解的缓存配置

<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>

现在,您的应用已经启用了基于注解的缓存服务。

在一个类中,假设您有三个方法,并且希望将它们分别缓存在不同的缓存提供程序中。

@Cacheable(cacheNames="name", cacheManager="yourProvider") 
public Object firstMethod(){
//You can enter different cache provider configured in each cache manager for each method.
}
lc8prwob

lc8prwob2#

<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>
f8rj6qna

f8rj6qna3#

我也面临同样的错误,这里是我的xml文件。

<bean id="cacheManagerFactory" class="org.springframework.cache.jcache.JCacheManagerFactoryBean">
    <property name="cacheManagerUri">
        <value>classpath:ehcache.xml</value>
    </property>
</bean>

<bean id="liteWeightBookingTemplateCache" class="org.springframework.cache.jcache.JCacheManagerFactoryBean">
    <property name="cacheManagerUri" ref="cacheManagerFactory"/>
    <property name="beanClassLoader">
        <value>com.core.TemplateCache</value>
    </property>
    <property name="cacheManagerProperties" ref="jcache_1H"/>
</bean>

我得到编译错误像“Bean必须是'java.net.URI'类型”。但我可以构建应用程序。启动服务器时,出现以下错误
由于:org.springframework.beans.factory.BeanCreationException:创建在类路径资源[applicationContext.xml]中定义的名为“cacheManagerFactory”的bean时出错:零

相关问题