Java Dropwizard会话群集
我需要一种跨不同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 谢谢,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
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()代替。
这是否过份,取决于您到底想要实现什么,以及您是否有能力在代码中拥有另一个依赖项。但就灵活性和易实现性而言,我绝对推荐它
我将其用作分布式映射,而不是将数据存储在会话本身中
你可以在这里看一些例子:和