2016-09-28 2 views
0

J'ai problème lors de la migration de données Spring Redis 1.5.2.RELEASE à 1.7.2.RELEASE, comme RedisCacheManager utilise RedisTemplate à 1,5. 2.RELEASE et RedisOperations dans 1.7.2.RELEASE en tant que paramètres du constructeur. Voici ma configuration Spring Data Redis actuelle à partir de 1.5.2.RELEASE. Comment je devrais le configurer pour 1.7.2.RELEASE?printemps données Redis 1.7.2.RELEASE, RedisOperations d'injection au lieu de 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> 

si je déclare un haricot comme suit pour RedisOperations et Injecter dans RedisCacheManager comme suit:

<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 a changé d'utiliser RedisOperations dans 1.7.2.RELEASE au lieu de RedisTemplate qui est utilisé dans 1.5.2.RELEASE. références Source suit:

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

En raison de cette configuration Redis mentionnée ci-dessus me jette ci-dessous erreur

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 

J'utilise la version Spring 4.3.2.RELEASE et données Spring Redis 1.7.2.RELEASE. Veuillez avoir vos suggestions sur ce problème d'injection et comment le résoudre. Je ne veux pas utiliser une configuration de cluster dans mon application.

+0

quel problème rencontrez-vous? Pouvez-vous ajouter la trace de la pile ou toute erreur que vous voyez? – Veeram

+0

@Reddy J'ai mis à jour la question, en ajoutant les informations d'erreur. J'espère maintenant que vous pouvez m'aider – nijogeorgep

Répondre

3

Cela devrait fonctionner. Vous devez juste utiliser l'espace de nom du constructeur correct.

<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

Qu'en est-il de redisOperations bean? Avons-nous besoin de faire une déclaration pour cela? – nijogeorgep

+0

a mis à jour la réponse. vous pouvez simplement référencer le modèle existant bean – Veeram

+0

Cette configuration fonctionne bien – nijogeorgep