2016-09-28 38 views
0

我有問題,而遷移春數據Redis的1.5.2.RELEASE1.7.2.RELEASE,作爲RedisCacheManager使用RedisTemplate 1.5。 2.RELEASE和RedisOperations在1.7.2.RELEASE中作爲構造函數參數。以下是我目前使用1.5.2.RELEASE的Spring Data Redis配置。我應該如何配置1.7.2.RELEASE?春數據Redis的1.7.2.RELEASE,注射RedisOperations代替RedisTemplate

<cache:annotation-driven cache-manager="cacheManager" /> 

    <!-- Redis Connection Factory --> 
    <beans:bean id="jedisConnectionFactory" 
     class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 
     p:host-name="${redis.host-name}" p:port="${redis.port}" p:use-pool="true" /> 

    <!-- Redis Template Definition --> 
    <beans:bean id="redisTemplate" 
     class="org.springframework.data.redis.core.RedisTemplate" 
     p:connection-factory-ref="jedisConnectionFactory" p:keySerializer-ref="stringRedisSerializer" 
     p:hashKeySerializer-ref="stringRedisSerializer" /> 

    <beans:bean id="stringRedisSerializer" 
     class="org.springframework.data.redis.serializer.StringRedisSerializer" /> 

    <!-- declare Redis Cache Manager --> 
    <beans:bean id='cacheManager' 
     class='org.springframework.data.redis.cache.RedisCacheManager' 
     c:template-ref='redisTemplate'> 
     <beans:property name="expires"> 
      <beans:map> 
       <beans:entry key="sessionData" value="7200"></beans:entry> 
       <beans:entry key="portalData" value="7200"></beans:entry> 
       <beans:entry key="referenceData" value="86400"></beans:entry> 
      </beans:map> 
     </beans:property> 
    </beans:bean> 

如果我宣佈一個bean的RedisOperations如下,如下注入它RedisCacheManager:

<beans:bean id="**redisOperations**" 
     class="org.springframework.data.redis.core.RedisOperations"/> 

<!-- declare Redis Cache Manager --> 
     <beans:bean id='cacheManager' 
      class='org.springframework.data.redis.cache.RedisCacheManager' 
      c:template-ref='**redisOperations**'> 
      <beans:property name="expires"> 
       <beans:map> 
        <beans:entry key="sessionData" value="7200"></beans:entry> 
        <beans:entry key="portalData" value="7200"></beans:entry> 
        <beans:entry key="referenceData" value="86400"></beans:entry> 
       </beans:map> 
      </beans:property> 
     </beans:bean> 

RedisCacheManager已更改爲使用1.7.2.RELEASE代替RedisTemplate RedisOperations所使用在1.5.2.RELEASE。來源引用如下:

https://github.com/spring-projects/spring-data-redis/blob/1.7.2.RELEASE/src/main/java/org/springframework/data/redis/cache/RedisCacheManager.java

https://github.com/spring-projects/spring-data-redis/blob/1.5.2.RELEASE/src/main/java/org/springframework/data/redis/cache/RedisCacheManager.java

因爲這上面提到的Redis配置拋出我下面的錯誤

ERROR org.springframework.web.servlet.DispatcherServlet localhost-startStop-1  - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.interceptor.CacheInterceptor#0': Cannot resolve reference to bean 'cacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cacheManager' defined in class path resource [spring/config/shared-config.xml]: Unsatisfied dependency expressed through constructor parameter 0: Ambiguous argument values for parameter of type [org.springframework.data.redis.core.RedisOperations] - did you specify the correct bean references as arguments? 
Related cause: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cacheManager' defined in class path resource [spring/config/shared-config.xml]: Unsatisfied dependency expressed through constructor parameter 0: Ambiguous argument values for parameter of type [org.springframework.data.redis.core.RedisOperations] - did you specify the correct bean references as arguments? 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1282) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1195) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1085) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5318) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5610) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:679) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1966) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cacheManager' defined in class path resource [spring/config/shared-config.xml]: Unsatisfied dependency expressed through constructor parameter 0: Ambiguous argument values for parameter of type [org.springframework.data.redis.core.RedisOperations] - did you specify the correct bean references as arguments? 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:736) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) 
    ... 35 more 

我使用Spring版本4.3.2.RELEASE和Spring數據Redis 1.7.2.RELEASE。 請在這個注射問題上提出你的建議,以及如何解決它。我不想在我的應用程序中使用羣集設置。

+0

你遇到什麼問題?你能添加堆棧跟蹤還是你看到的任何錯誤? – Veeram

+0

@Reddy我通過添加錯誤信息更新了問題。希望你現在可以幫我出去 – nijogeorgep

回答

3

這應該起作用。你只需要使用正確的構造函數名稱空間。

<beans:bean id='cacheManager' 
     class='org.springframework.data.redis.cache.RedisCacheManager' 
     c:redis-operations-ref='redisTemplate'> 
     <beans:property name="expires"> 
      <beans:map> 
       <beans:entry key="sessionData" value="7200"></beans:entry> 
       <beans:entry key="portalData" value="7200"></beans:entry> 
       <beans:entry key="referenceData" value="86400"></beans:entry> 
      </beans:map> 
     </beans:property> 
</beans:bean> 
+0

redisOperations bean呢?我們是否需要爲此做出聲明? – nijogeorgep

+0

更新了答案。你可以參考現有的模板bean – Veeram

+0

這個配置工程很好 – nijogeorgep