【问题标题】:Spring Session - SessionDestroyedEvent is not calledSpring Session - SessionDestroyedEvent 未被调用
【发布时间】:2018-11-12 19:58:45
【问题描述】:

我有一个 Spring 应用程序,其中会话存储在 redis 中,超时时间很短(1m)。我想在会话超时后调用一个函数,但是没有调用 SessionDestroyedEvent @EventListener。

SessionListener.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

    }

}

application.properties:

spring.session.store-type=redis
server.servlet.session.timeout=1m

注释:

  1. SessionCreatedEvent 上的 eventListener 被调用
  2. 来自 redis 的会话在超时后消失

【问题讨论】:

    标签: spring redis timeout event-listener spring-session


    【解决方案1】:

    Spring Session 参考中的SessionDeletedEvent and SessionExpiredEvent 部分描述了如何清理会话。

    来自文档:

    通过侦听Redis Keyspace 事件SessionMessageListener 可以触发SessionDeletedEventSessionExpiredEvent。为了使其正常工作,需要为通用命令和过期事件启用 Redis 键空间事件

    【讨论】:

      猜你喜欢
      • 2015-10-06
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      相关资源
      最近更新 更多