Tomcat:在数据库中存储会话
我正在寻找一种避免内存会话复制/群集的方法,并将会话存储在数据库中。 此时使用Tomcat的JDBCStore是无用的,因为它只在数据库中存储非活动会话以保存服务器内存。 有什么建议么?
非常感谢Fabian
如果您不想以应该使用的方式使用会话,那么根本不要使用它 – 开发自己的会话对象。 它仍然可以实现HttpSession
,甚至可以从HttpSession
的实现扩展。
您可以使用Filter
来包装您的请求,以便它返回您的会话对象而不是标准对象。 在您的会话中,您可以将内容存储在DB而不是内存中。
您可以使用Hazelcast而不是写入数据库 – 它提供分布式集合。 但我想这将花费与配置会话复制相同的工作量。 并且会话复制并不困难 – 所有容器都支持它。
这些都是粗略的指导方针,任务不会是微不足道的。 我建议坚持使用标准会话使用模式,并且只在真正需要时才将内容存储在数据库中。
为了避免复制的需要,您可以尝试使用粘性会话 – 即,当负载均衡器将用户定向到服务器时,该用户的每个后续请求都将发送到同一服务器。
您可能希望查看此项目 ,我更愿意在memcached中而不是在DB中存储会话。
在我看来,我自己无法实现JDBC会话管理器,但感谢您的答案和时间 – Hazelcast需要仔细观察,对我来说似乎非常强大。 我会做类似J. Brisbin的事情: http : //jbrisbin.com/web2/articles/tomcat-session-manager-backed-by-riak/
- jackson将数组反序列化为java对象
- 如何添加注释以从jacoco代码覆盖率报告中排除方法?
- 如何在java程序中禁用堆栈跟踪生成?
- 无法使用SMTP发送电子邮件(获取javax.mail.MessagingException:无法将套接字转换为TLS;)
- 在xml jaxb中将空值表示为空元素
- Java AES解密BadPaddingException
- 在xml中定义Spring @PropertySource并在Environment中使用它
- Eclipse:java.lang.NoClassDefFoundError:javax / activation / DataHandler
- 使用JQuery选择和识别元素以在Selenium 2 Java API中使用它