Java Dropwizard会话群集

Java Dropwizard会话群集,java,jetty,dropwizard,session-management,Java,Jetty,Dropwizard,Session Management,我需要一种跨不同dropwizard web服务共享会话的方法。在Jetty中,有一种方法可以通过使用JDBCSessionManager和JDBCSessionManager()来实现 问题是dropwizard(0.7.1)没有公开所需的org.eclipse.jetty.server.server的引用,因此没有明显的方法来更改SessionManager和SessiondManager。 我看到服务器是在io.dropwizard.cli.ServerCommand#run中通过io.d

我需要一种跨不同dropwizard web服务共享会话的方法。在Jetty中,有一种方法可以通过使用JDBCSessionManager和JDBCSessionManager()来实现

问题是dropwizard(0.7.1)没有公开所需的org.eclipse.jetty.server.server的引用,因此没有明显的方法来更改SessionManager和SessiondManager。 我看到服务器是在io.dropwizard.cli.ServerCommand#run中通过io.dropwizard.Server.ServerFactory创建的,但io.dropwizard.cli.ServerCommand#run中的引用是本地的,因此我甚至无法使用反射来获取所需的引用

在dropwizard中,我应该如何更改SessionManager和SessiondManager

谢谢,

Alex

我能够通过连接到生命周期来让它工作

private void addSessionHandler(final Environment env, final DataSource dataSource) {
    env.lifecycle().addLifeCycleListener(new AbstractLifeCycleListener() {
        @Override
        public void lifeCycleStarting(LifeCycle event) {
            if (!(event instanceof Server)) {
                return;
            }

            Server server = (Server) event;
            JDBCSessionIdManager ids = jdbcSessionIdManager(server);
            server.setSessionIdManager(ids);
            env.servlets().setSessionHandler(new SessionHandler(jdbcSessionManager(ids)));
        }

        private JDBCSessionManager jdbcSessionManager(JDBCSessionIdManager idManager) {
            JDBCSessionManager m = new JDBCSessionManager();
            m.setSessionIdManager(idManager);
            return m;
        }

        private JDBCSessionIdManager jdbcSessionIdManager(Server server) {
            JDBCSessionIdManager m = new JDBCSessionIdManager(server);
            m.setWorkerName("");
            m.setDatasource(dataSource);
            return m;
        }
    });
}
我用Hazelcast()代替。 这是否过份,取决于您到底想要实现什么,以及您是否有能力在代码中拥有另一个依赖项。但就灵活性和易实现性而言,我绝对推荐它

我将其用作分布式映射,而不是将数据存储在会话本身中

你可以在这里看一些例子:和