1

我有几个 servlet 在 Tomcat 服务器上工作。现在我让他们为每个请求创建数据库连接并在使用后关闭它们。这可能会导致建立/关闭连接的巨大开销。使用单个连接管理器 servlet 在所有 servlet 之间共享一个全局连接怎么样(即所有 servlet 使用相同的连接)。这是一个好的做法还是并发操作可能存在问题?

4

3 回答 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 回答