我有一个由Redis支持的Spring Session的Spring Boot项目。我正在尝试捕获sessionDestroyed事件,以便我可以执行一些清理。
捕获事件的代码如下所示,我在Stack Overflow的其他地方找到的指导。
@Component
public class SessionEndedListener implements ApplicationListener<SessionDestroyedEvent> {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
@Override
public void onApplicationEvent(SessionDestroyedEvent event) {
LOGGER.info("Destroyed session: {}", event.getSessionId());
}
}
我已经设置了我的Redis会话配置
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 120)
public class RedisSessionConfig {
}
我可以看到Spring Redis的一些日志每分钟清理过期的会话,如下所示
2016-07-21 11:07:00,026 ==== RedisSessionExpirationPolicy.java ==== thread:pool-4-thread-1 ==== DEBUG&gt; org.springframework.session.data.redis.RedisSessionExpirationPolicy.cleanExpiredSessions()=&gt; [](行:107) 清理会议将于2016年7月21日星期四11:07:00到期。
但是从不调用用于捕获SessionDestroyedEvent的代码。 我在这里缺少什么?
请注意,我正在使用本地Redis服务器对此进行测试,其中将关键空间事件配置为Egx没有问题。
当我通过代码调试时。
本声明
if(!body.startsWith("spring:session:sessions:")) {
return;
}
在课堂上org.springframework.session.data.redis.SessionMessageListener在有机会发布事件之前提前返回
因为变量体具有值
\xac\xed\x00\x05t\x00<spring:session:sessions:2392443d-62a9-4f8c-81f0-c0bb446eb16f
我正在使用spring-session 1.0.2.RELEASE。是否有修复过的错误?