我有一个 Spring 应用程序,其中会话以 redis 形式存储,超时时间很短(1m(。我想在会话超时后调用一个函数,但是会话已销毁事件@EventListener没有被调用。
会话侦听器.java:
import org.springframework.context.event.EventListener;
import org.springframework.session.events.SessionCreatedEvent;
import org.springframework.session.events.SessionDestroyedEvent;
import org.springframework.stereotype.Component;
@Component
public class SessionListener {
@EventListener
public void sessionCreated(SessionCreatedEvent event) {
System.out.println("created"); // gets called
}
@EventListener
public void sessionDestroyed(SessionDestroyedEvent event) {
System.out.println("destroyed"); // never gets called
}
}
应用程序属性:
spring.session.store-type=redis
server.servlet.session.timeout=1m
笔记:
- SessionCreatedEvent 上的 eventListener 被调用
- 来自 Redis 的会话在超时后消失
春季会话参考中的会话已删除事件和会话过期事件部分描述了如何清理会话。
从文档中:
触发
SessionDeletedEvent
或SessionExpiredEvent
可通过侦听Redis 密钥空间事件的SessionMessageListener
获得。为此,需要启用通用命令和过期事件的Redis 密钥空间事件