Java Tomcat:在数据库中存储会话

Java Tomcat:在数据库中存储会话,java,tomcat,servlets,jdbc,replication,Java,Tomcat,Servlets,Jdbc,Replication,我正在寻找一种方法来避免内存中的会话复制/集群,并将会话存储在数据库中。此时使用Tomcat的JDBCStore是无用的,因为它只在数据库中存储非活动会话以节省服务器内存。 有什么建议吗 谢谢你 Fabian如果您不想按预期的方式使用会话,那么根本不要使用它-开发您自己的会话对象。它仍然可以实现HttpSession,甚至可以从HttpSession的实现扩展 您可以使用过滤器包装您的请求,以便它返回您的会话对象,而不是标准的会话对象。在会话中,您可以将内容存储在DB中,而不是存储在内存中 您可

我正在寻找一种方法来避免内存中的会话复制/集群,并将会话存储在数据库中。此时使用Tomcat的JDBCStore是无用的,因为它只在数据库中存储非活动会话以节省服务器内存。 有什么建议吗

谢谢你
Fabian

如果您不想按预期的方式使用会话,那么根本不要使用它-开发您自己的会话对象。它仍然可以实现
HttpSession
,甚至可以从
HttpSession
的实现扩展

您可以使用
过滤器
包装您的请求,以便它返回您的会话对象,而不是标准的会话对象。在会话中,您可以将内容存储在DB中,而不是存储在内存中

您可以使用-它提供分布式集合,而不是写入数据库。但我想这将花费与配置会话复制相同的工作量。而且会话复制并没有那么难——它受到所有容器的支持

这些都是粗略的指导方针,任务不会是微不足道的。我建议坚持标准的会话使用模式,只有在真正需要时才将内容存储在DB中


为了避免复制的需要,您可以尝试使用粘性会话—即,当负载平衡器将用户定向到服务器时,该用户随后的每个请求都会发送到同一服务器。

您可能需要查看,我更喜欢将会话存储在memcached中,而不是数据库中。

在我看来,没有办法单独实现JDBC会话管理器,但感谢您的回答和时间-Hazelcast需要仔细查看,对我来说似乎非常强大。我会做类似的事情,比如J.布里斯宾:

谢谢你的快速回复。我打算在Microsoft Azure中运行几个Tomcat。粘滞会话的问题是Azure的负载平衡器不支持粘滞会话。在这种云环境中实现会话复制的最简单方法是将会话存储在数据库中。您有HttpSession扩展和筛选器的代码示例吗?谢谢你的帮助answer@Fabe-对不起,我没有示例。我已签出-非常有趣,但非粘性会话版本尚未准备好投入生产;(确实是一个有趣的项目,+1btw,memcached会话管理器1.4现在发布了-支持非粘性会话出于好奇,你看过亚马逊的Elastic Beanstalk吗?他们提供粘性会话。