2016-09-28 3 views
0

Ich habe Probleme während der Migration Spring Data Redis 1.5.2.RELEASE zu 1.7.2.RELEASE, wie RedisCacheManager verwendet RedisTemplate in 1.5. 2.RELEASE und RedisOperations in 1.7.2.RELEASE als Konstruktorparameter. Im Folgenden finden Sie meine aktuelle Spring Data Redis Konfiguration ab 1.5.2.RELEASE. Wie sollte ich es für 1.7.2.RELEASE konfigurieren?Spring Data Redis 1.7.2.RELEASE, Einspritzung RedisOperations statt 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> 

Was passiert, wenn ich erklären, eine Bohne wie für RedisOperations folgt und es in RedisCacheManager Injizieren wie folgt:

<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 geändert hat RedisOperations in 1.7.2.RELEASE statt RedisTemplate zu verwenden, die verwendet wird, in 1.5.2.RELEASE. Quellenangaben folgt:

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

Aufgrund dieser oben genannten redis Konfiguration wirft mich unter Fehler

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 

Ich bin mit Frühlings Version 4.3.2.RELEASE und Spring Data Redis 1.7.2.RELEASE. Bitte haben Sie Ihre Vorschläge zu diesem Problem mit der Injektion und wie Sie es beheben können. Ich möchte kein Cluster-Setup in meiner Anwendung verwenden.

+0

mit welchem ​​Problem haben Sie zu tun? Können Sie den Stack-Trace oder einen Fehler, den Sie sehen, hinzufügen? – Veeram

+0

@Reddy Ich habe die Frage aktualisiert, indem ich die Fehlerinformationen hinzugefügt habe. Hoffe jetzt können Sie mir helfen – nijogeorgep

Antwort

3

Dies sollte funktionieren. Sie müssen nur den richtigen Namensraum für den Konstruktor verwenden.

<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

Was ist mit redisOperations Bohne? Müssen wir eine Erklärung dafür abgeben? – nijogeorgep

+0

aktualisierte die Antwort. Sie können nur die vorhandene Vorlage Bean verweisen – Veeram

+0

Diese Konfiguration funktioniert gut – nijogeorgep

Verwandte Themen