我有几个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. 与cassandra的永久连接或每个请求的连接?
- 2. RedisClusterClient,每个线程一个连接或一个连接
- 3. 全局连接变量或每次新建一个
- 4. IPC:为每个请求连接或保持套接字打开?
- 5. MySQL连接器/ NET连接每个连接多个DataReader?
- 6. Express.JS + Node-Mysql和每个http请求1个连接
- 7. 请求与多个连接
- 8. 连接两个Ajax请求
- 9. MySQL,视图是全局还是每个会话/连接?
- 10. OkHttp每个主机或全局连接池maxIdleConnections?
- 11. MySQL的禁用每个会话连接触发请求
- 12. SQL一个请求连接表GROUP_CONCAT
- 13. 每个请求与ADO.net的连接,是或否?
- 14. 在memcached持久连接或每个请求
- 15. 维护一个安全的MySQL连接
- 16. 单个连接中的多个请求?
- 17. MySQL的左连接或与全文检索全连接结果
- 18. 更好的方法是在每个请求上有一个从节点或连接到memcached/mongo的全局连接?
- 19. Rails:在每个请求上切换连接,但保留连接池
- 20. 为什么持久性PDO连接会与每个请求建立新连接?
- 21. 连接和连接请求超时
- 22. MySQL的左连接请求不能找到一个错误
- 23. 在整个应用程序上共享数据库连接或在每个请求上连接到数据库?
- 24. Linkedin连接搜索每个连接的第一个职位
- 25. 在每个单一的非查询或整个连接之前打开连接?
- 26. MySQL数据库和ASP.NET全局连接
- 27. Node.js和全局MySQL连接OBJ
- 28. Node.js服务器:连接到redis数据库一次?或在每个请求?
- 29. MySQL全外连接
- 30. 如何请求安全连接(https)?
我试过BoneCP,现在它工作的很好。谢谢 – NSF