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