Spring Session中session的事件监听「终于解决」

Spring Session中session的事件监听「终于解决」前提Redis版本>2.8开启事件通知配置(默认springsession会自动开启该配置)配置文件:notify-keyspace-eventsEx命令行:redis-cliconfigsetnotify-keyspace-eventsEgx不需要自动开启该配置的话可以将如下配置加入到容器中@BeanpublicstaticConfigureRed…

大家好,欢迎来到IT知识分享网。

前提

  • Redis版本>2.8

  • 开启事件通知配置(默认spring session会自动开启该配置
    配置文件:notify-keyspace-events Ex
    命令行:redis-cli config set notify-keyspace-events Egx

  • 不需要自动开启该配置的话可以将如下配置加入到容器中

    @Bean
    public static ConfigureRedisAction configureRedisAction() { 
         
        return ConfigureRedisAction.NO_OP;
    }
    
    • spring boot 自动注入:RedisHttpSessionConfiguration#setImportMetadata方法会注入RedisHttpSessionConfiguration相关配置
    • spring session开启redis事件通知相关类: RedisHttpSessionConfiguration、 ConfigureNotifyKeyspaceEventsAction
    • spring session自动开启redis事件通知文档

RedisSession监听配置

@Configuration
public class RedisHttpSessionListenerConfig { 
   

    /** * 监听session创建 */
    @EventListener
    public void onCreated(SessionCreatedEvent event) { 
   
        String sessionId = event.getSessionId();
        // spring-session提供的session
        Session session = event.getSession();
        System.out.println("创建:" + sessionId);
    }

    /** * 监听session删除 */
    @EventListener
    public void onDeleted(SessionDeletedEvent event) { 
   
        String sessionId = event.getSessionId();
        // spring-session提供的session
        Session session = event.getSession();
        System.out.println("删除:" + sessionId);
    }

    /** * 监听session过期 */
    @EventListener
    public void onExpired(SessionExpiredEvent event) { 
   
        String sessionId = event.getSessionId();
        // spring-session提供的session
        Session session = event.getSession();
        System.out.println("过期:" + sessionId);
    }
}

原理

  • 在spring-Session中session的创建、删除、过期都会接收到redis相关事件的通知
  • spring-session中接收到相关通知后再由Spring发布相关ApplicationEvent(SessionCreatedEvent 、SessionDeletedEvent 、SessionExpiredEvent)
  • 由spring-context提供的@EventListener注解即可实现相关事件的监听

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25044.html

(0)
上一篇 2023-08-01 13:00
下一篇 2023-08-08 09:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信