我有几个servlet在Tomcat服务器上工作。现在我让他们为每个请求创建数据库连接并在使用后关闭它们。这可能会导致建立/关闭连接的巨大开销。使用单个连接管理器servlet共享所有servlet之间的全局连接(即所有servlet使用相同的连接)如何?这是一个很好的做法,还是可能会出现并发操作问题?全局MySQL连接或每个请求一个连接?
1
A
回答
2
你应该阅读有关连接池:
C3PO,BoneCP,DBCP
这是可用的最好的和流行的连接池,我在我的生产项目使用BoneCP。
2
我认为你需要考虑如果可能的话使用连接池。
这样你不需要担心创建连接/关闭开销。
当你想连接时,你可以从池中获取它,当你完成连接时,调用close()方法返回连接池。
查看此discussion了解连接池的工作原理。
1
这可能会导致建立/关闭连接的巨大开销。
你说的对,连接的建立和关闭如果太频繁就证明是昂贵的操作。
怎么样使用一个单独的连接管理器的servlet来分享所有servlet之间的全球连接(即所有servlet使用相同的连接)
虽然JDBC规范并不阻止共享的连接通过多线程,这被认为是不好的做法,因为它可能是驱动程序实现相关的。因此,每个数据库会话一个连接会导致更便携和可维护的代码。
JDBC规范建议使用DataSource
对象池连接以避免上面提到的开销。
为了得到连接时,应用程序可以与交互或者:
- DriverManager类与一种或多种驱动程序实现
OR
- DataSource实现工作
使用DataSource对象是首选方法,因为它增强了应用程序的可移植性,它使代码维护更加容易,并且它使得应用程序透明地使用连接池和分布式事务处理成为可能。所有建立到数据源的连接的J2EE组件都使用一个 DataSource对象来获取连接。
相关问题
- 1. RedisClusterClient,每个线程一个连接或一个连接
- 2. IPC:为每个请求连接或保持套接字打开?
- 3. MySQL连接器/ NET连接每个连接多个DataReader?
- 4. 连接两个Ajax请求
- 5. MySQL,视图是全局还是每个会话/连接?
- 6. OkHttp每个主机或全局连接池maxIdleConnections?
- 7. MySQL的禁用每个会话连接触发请求
- 8. 单个连接中的多个请求?
- 9. MySQL的左连接或与全文检索全连接结果
- 10. 更好的方法是在每个请求上有一个从节点或连接到memcached/mongo的全局连接?
- 11. 为什么持久性PDO连接会与每个请求建立新连接?
- 12. 在整个应用程序上共享数据库连接或在每个请求上连接到数据库?
- 13. Linkedin连接搜索每个连接的第一个职位
- 14. 在每个单一的非查询或整个连接之前打开连接?
- 15. MySQL数据库和ASP.NET全局连接
- 16. 如何请求安全连接(https)?
- 17. MySQL全外连接
- 18. MySQL我连接了哪个连接?
- 19. 并行的多个SOAP请求/连接?
- 20. 如何连接两个ajax请求?
- 21. SQL请求多个左连接和零
- 22. 请求处理时永久TCP连接或连接建立
- 23. MYSQL:多个连接
- 24. 多个mysql连接
- 25. Apache - > MySQL多个连接vs一个连接
- 26. MySQL多个连接查询限制在一个连接
- 27. MySQL在同一个表上连接多个连接?
- 28. MYSQL一个类的一个连接
- 29. 连接到每个用户在MySQL
- 30. 每个主机的MySQL连接
我试过BoneCP,现在它工作的很好。谢谢 – NSF