我知道Java的session对象可以存储复杂的对象,比如到数据库的连接。
我正在考虑如何为使用Java编写的编程实践实现特定的应用程序。我的第一个选择是使用连接池,这在Java中非常简单。
出于好奇,我想知道,与使用连接池相比,在客户端启动会话并将其存储在数据库中时,创建到数据库的连接的优缺点是什么。
非常感谢。
发布于 2012-03-31 00:40:43
资源池将以您的系统可以处理的方式优化资源(数据库连接)的处理。即使您有大量打开的连接,也可能最终耗尽资源。
如果您将数据库连接存储在会话上下文中,则更有可能发生这种情况。Web应用程序不需要一直连接到数据库,这种连接可以在新操作开始时建立,在结束时关闭。使用资源池,当您不再需要它时,您可以将连接返回到池中,因此新用户( web范例中的会话)可以使用您已经释放的资源,而不是创建新的资源。
该池还将处理一些资源长时间空闲(在特定时间内没有人使用它们),然后释放这些资源的情况。
在会话中存储数据库连接时,您永远不会释放资源,而是保留对它的永久引用,该引用将持续到用户会话。你可能在短时间内不会遇到任何问题,特别是当同时连接的用户真的很少的时候。但在现实世界的应用程序中,您肯定会找到它们。
因此,在会话上下文中存储数据库连接被认为是一种不良实践。
编辑:我忘了提到应该只在会话中存储Serializable对象,因此,如果应用程序服务器决定钝化会话,则可以在应用程序服务器决定重新激活它时将其持久化和恢复。数据库连接不是Serializable资源。
发布于 2012-03-31 00:36:13
使用连接池可以最大限度地提高连接的可用性。这意味着更少的连接=更少的内存=更少的套接字等等。在会话中使用池比保存更好的原因是,如果有人意外退出,会发生什么?如果您的会话中有一个连接,您可能会冒着长时间保持该连接活动的风险,可能是无限期的。
https://stackoverflow.com/questions/9946935
复制相似问题