会话活动在春季会议上不起作用

时间:2016-11-11 18:32:11

标签: java spring session tomcat spring-session

我的应用使用http并踩踏WebSocket。所以当用户使用WebSockets时我需要刷新我的httpSession所以不发明自行车我决定使用Spring Session,因为这提供了Http和WebSockets之间的明确集成。但我遇到了一个问题。当我使用TOMCAT SESSION实现时,我有这个听众:

@Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.addListener(new HttpSessionEventPublisher());
...
}

它起得很完美。会话注册表收到了SessionDestroyEvent并销毁了会话。

现在,使用基于H2的Spring Session,它不起作用。 我尝试了不同的方法:

@Bean
public HttpSessionEventPublisher httpSessionPublisher() {
    return new HttpSessionEventPublisher();
}


@Bean
public HttpSessionListener httpSessionListener() {
    return new HttpSessionListener() {
        @Override
        public void sessionCreated(HttpSessionEvent se) {
            System.out.println("I EXIST");
        }

        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            System.out.println("I EXIST");
        }
    };
}

但它也不起作用。

我将SpringSession与H2存储一起使用,我的配置是:

@EnableJdbcHttpSession(maxInactiveIntervalInSeconds = 15)
public class H2SessionConfig {

    @Bean(name = "session_dataSource")
    public EmbeddedDatabase dataSource() {
        return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2)
                .addScript("org/springframework/session/jdbc/schema-h2.sql").build();
    }

    @Bean
    public PlatformTransactionManager transactionManager(@Qualifier("session_dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public HttpSessionEventPublisher httpSessionEventPublisher() {
        return new HttpSessionEventPublisher();
    }

    @Bean
    public HttpSessionListener httpSessionListener() {
        return new HttpSessionListener() {
            @Override
            public void sessionCreated(HttpSessionEvent se) {
                System.out.println("I EXIST");
            }

            @Override
            public void sessionDestroyed(HttpSessionEvent se) {
                System.out.println("I EXIST");
            }
        };
    }

    @Bean
    public HttpSessionEventPublisher httpSessionPublisher() {
        return new HttpSessionEventPublisher();
    }
}

提前谢谢。

1 个答案:

答案 0 :(得分:1)

Spring Session JDBC不支持发布会话事件,因为在这方面存在明显的RDBMS限制。

reference manualJdbcOperationsSessionRepository javadoc都记录了此限制。