在springboot1.2.3中集成elasticcache(集群模式开启)

dy2hfwbg  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(172)

我有一个弹性缓存redis cluster->shard-2,replica-1。我正在尝试将它与我的spring boot应用程序集成 (version-1.2.3) . 默认的spring data redis版本1.4.1不支持redis集群配置。将spring数据redis版本升级到更高版本->1.8时。绝地武士 version:-2.9.0 我面临以下问题issue:-

  1. Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheManager' defined in class path resource [mobi/fareye/config/RedisConfiguration.class]: Post-processing failed of bean type [class org.springframework.data.redis.cache.RedisCacheManager] failed; nested exception is java.lang.IllegalStateException: Failed to introspect bean class [org.springframework.data.redis.cache.RedisCacheManager] for persistence metadata: could not find class that it depends on
  2. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:936)
  3. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
  4. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
  5. at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
  6. at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
  7. at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
  8. at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
  9. at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
  10. at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
  11. at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
  12. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
  13. at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
  14. at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
  15. at mobi.fareye.Application.main(Application.java:71)
  16. Caused by: java.lang.IllegalStateException: Failed to introspect bean class [org.springframework.data.redis.cache.RedisCacheManager] for persistence metadata: could not find class that it depends on
  17. at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:396)
  18. at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:333)
  19. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:931)
  20. ... 13 more
  21. Caused by: java.lang.NoClassDefFoundError: org/springframework/cache/support/AbstractValueAdaptingCache
  22. at java.lang.ClassLoader.defineClass1(Native Method)
  23. at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
  24. at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  25. at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
  26. at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
  27. at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
  28. at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
  29. at java.security.AccessController.doPrivileged(Native Method)
  30. at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
  31. at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
  32. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
  33. at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
  34. at java.lang.Class.getDeclaredMethods0(Native Method)
  35. at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
  36. at java.lang.Class.getDeclaredMethods(Class.java:1975)
  37. at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:420)
  38. at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:392)
  39. ... 15 more
  40. Caused by: java.lang.ClassNotFoundException: org.springframework.cache.support.AbstractValueAdaptingCache
  41. at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
  42. at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
  43. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
  44. at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
  45. ... 32 more

我的配置类:-

  1. @Configuration
  2. public class RedisConfiguration {
  3. private final Integer maxInactiveIntervalInSeconds = 60*60*24;
  4. @Value("${spring.redis.host}")
  5. private String redisConnectionHostName;
  6. @Value("${spring.redis.port}")
  7. private Integer redisConnectionPort;
  8. @Value("${spring.redis.maxIdle:8}")
  9. private Integer redisConnectionMaxIdle;
  10. @Value("${spring.redis.maxTotal:8}")
  11. private Integer redisConnectionMaxTotal;
  12. @Value("${spring.redis.timeout:50}")
  13. private Integer redisConnectionTimeout;
  14. @Value("${app.REDIS_CACHE_DEFAULT_EXPIRY_TIME_IN_SECONDS}")
  15. private Long REDIS_CACHE_DEFAULT_EXPIRY_TIME_IN_SECONDS;
  16. @Bean
  17. public RedisConnectionFactory redisConnectionFactory() {
  18. List<String> nodes = Collections.singletonList(redisConnectionHostName+":redisConnectionPort);
  19. RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(nodes);
  20. JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration);
  21. if(redisConnectionHostName == null) {
  22. throw new BeanCreationException("Missing yml configuration : \"spring.redis.host\". " +
  23. "Unable to create bean for RedisConnectionFactory.");
  24. } else if(redisConnectionPort == null) {
  25. throw new BeanCreationException("Missing yml configuration : \"spring.redis.port\". " +
  26. "Unable to create bean for RedisConnectionFactory.");
  27. }
  28. // redisConnectionFactory.setHostName(redisConnectionHostName);
  29. // redisConnectionFactory.setPort(redisConnectionPort);
  30. // JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  31. // jedisPoolConfig.setMaxTotal(redisConnectionMaxTotal);
  32. // jedisPoolConfig.setMaxIdle(redisConnectionMaxIdle);
  33. // jedisPoolConfig.setMaxWaitMillis(redisConnectionTimeout);
  34. // redisConnectionFactory.setPoolConfig(jedisPoolConfig);
  35. return redisConnectionFactory;
  36. }
  37. @Bean
  38. public RedisTemplate<String, Object> redisTemplate() {
  39. RedisTemplate<String, Object> template = new RedisTemplate<>();
  40. template.setConnectionFactory(redisConnectionFactory());
  41. return template;
  42. }
  43. @Bean(name = "stringRedisTemplate")
  44. public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
  45. StringRedisTemplate redisTemplate = new StringRedisTemplate();
  46. redisTemplate.setKeySerializer(new StringRedisSerializer());
  47. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  48. redisTemplate.setConnectionFactory(redisConnectionFactory);
  49. return redisTemplate;
  50. }
  51. @Bean(name = "objectRedisTemplate")
  52. public RedisTemplate<String, Object> objectRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
  53. RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
  54. redisTemplate.setKeySerializer(new StringRedisSerializer());
  55. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  56. redisTemplate.setConnectionFactory(redisConnectionFactory);
  57. return redisTemplate;
  58. }
  59. @Bean
  60. public CacheManager cacheManager() {
  61. RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate());
  62. cacheManager.setDefaultExpiration(REDIS_CACHE_DEFAULT_EXPIRY_TIME_IN_SECONDS);
  63. cacheManager.setUsePrefix(true);
  64. return cacheManager;
  65. }
  66. }

根据我的发现,这个错误与springdataredis所需的spring上下文的不同版本有关。我想避免spring版本升级。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题