Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer'

矫情吗;* 2022-08-21 09:40 207阅读 0赞
  1. @Configuration
  2. public class HttpSessionConfig {
  3. @Bean
  4. public static ConfigureRedisAction configureRedisAction() {
  5. return ConfigureRedisAction.NO_OP;
  6. }
  7. }

spring 官方链接:

http://docs.spring.io/spring-session/docs/current/reference/html5/#api-redisoperationssessionrepository-sessiondestroyedevent

spring-session中间件需要依赖redis2.8.0以上版本,并且需要开启: notify-keyspace-events gxE;

如果spring-session使用的是redis集群环境,且redis集群环境没有开启 Keyspace notifications功能,则应用启动时会抛出如下异常:

[org.springframework.web.context.support.XmlWebApplicationContext][refresh]Exception encountered during context initialization - cancelling refresh attempt

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘enableRedisKeyspaceNotificationsInitializer’ defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.data.redis.RedisConnectionFailureException: Unexpected end of stream.; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream.

  1. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
  2. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
  3. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
  4. at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
  5. at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
  6. at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
  7. at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
  8. at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
  9. at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
  10. at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
  11. at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:434)
  12. at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
  13. at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
  14. at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
  15. at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
  16. at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
  17. at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
  18. at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
  19. at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943)
  20. at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)
  21. at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504)
  22. at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
  23. at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
  24. at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
  25. at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
  26. at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
  27. at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
  28. at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
  29. at org.apache.catalina.core.StandardService.start(StandardService.java:525)
  30. at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
  31. at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
  32. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  33. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  34. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  35. at java.lang.reflect.Method.invoke(Method.java:597)
  36. at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
  37. at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

Caused by: org.springframework.data.redis.RedisConnectionFailureException: Unexpected end of stream.; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream.

  1. at org.springframework.data.redis.connection.jedis.JedisExceptionConverter.convert(JedisExceptionConverter.java:47)
  2. at org.springframework.data.redis.connection.jedis.JedisExceptionConverter.convert(JedisExceptionConverter.java:36)
  3. at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:37)
  4. at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:37)
  5. at org.springframework.data.redis.connection.jedis.JedisConnection.convertJedisAccessException(JedisConnection.java:196)
  6. at org.springframework.data.redis.connection.jedis.JedisConnection.getConfig(JedisConnection.java:557)
  7. at org.springframework.session.data.redis.config.ConfigureNotifyKeyspaceEventsAction.getNotifyOptions(ConfigureNotifyKeyspaceEventsAction.java:69)
  8. **at org.springframework.session.data.redis.config.ConfigureNotifyKeyspaceEventsAction.configure(ConfigureNotifyKeyspaceEventsAction.java:50)**
  9. at org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration$EnableRedisKeyspaceNotificationsInitializer.afterPropertiesSet(RedisHttpSessionConfiguration.java:167)

代码异常具体位置:org.springframework.session.data.redis.config.ConfigureNotifyKeyspaceEventsAction.java第50行

异常信息第75行:

Unable to configure Redis to keyspace notifications. See http://docs.spring.io/spring-session/docs/current/reference/html5/\#api-redisoperationssessionrepository-sessiondestroyedevent

官方文档中说Keyspace notifications功能默认是关闭的(默认地,Keyspace 时间通知功能是禁用的,因为它或多或少会使用一些CPU的资源),

我们需要打开它。打开的方法也很简单,配置属性:notify-keyspace-events。

发表评论

表情:
评论列表 (有 0 条评论,207人围观)

还没有评论,来说两句吧...

相关阅读