我有几个 servlet 在 Tomcat 服务器上工作。现在我让他们为每个请求创建数据库连接并在使用后关闭它们。这可能会导致建立/关闭连接的巨大开销。使用单个连接管理器 servlet 在所有 servlet 之间共享一个全局连接怎么样(即所有 servlet 使用相同的连接)。这是一个好的做法还是并发操作可能存在问题?
问问题
1163 次
3 回答
2
我认为您需要尽可能考虑使用连接池。
这样您就不必担心创建连接/关闭开销。
当你想要连接时,你可以从池中获取它,当你完成连接时,调用 close() 它将连接返回到池。
请参阅此讨论以了解连接池的工作原理。
于 2012-09-21T18:46:11.973 回答
2
您应该阅读有关连接池的信息:
C3PO、BoneCP、DBCP
这是可用的最好和流行的连接池,我在我的生产项目中使用 BoneCP。
于 2012-09-21T18:46:33.437 回答
1
这可能会导致建立/关闭连接的巨大开销。
你是对的,如果过于频繁,连接建立和关闭它被证明是昂贵的操作。
使用单个连接管理器 servlet 在所有 servlet 之间共享全局连接怎么样(即所有 servlet 使用相同的连接)
尽管 JDBC 规范并没有阻止连接被多个线程共享,但这被认为是一种不好的做法,因为它可能依赖于驱动程序的实现。因此,每个数据库会话一个连接会产生更多可移植和可维护的代码。
JDBC 规范建议使用DataSource
对象来池连接以避免上面提到的开销。
要获得连接,应用程序可以与以下任一交互:
- 使用一个或多个 Driver 实现的 DriverManager 类
或者
- 数据源实现
使用 DataSource 对象是首选方法,因为它增强了应用程序的可移植性,使代码维护更容易,并且使应用程序可以透明地使用连接池和分布式事务。所有与数据源建立连接的 J2EE 组件都使用 DataSource 对象来获得连接。
于 2012-09-21T18:56:13.003 回答