Hibernate JDBC连接是否应该与netstat网络连接匹配?
我们有一个Tomcat6/Hibernate 3.x/Postgres应用程序,我对应用程序服务器和数据库之间的“连接”有点茫然,至少就JDBC而言是这样 表面上,我们使用的是一个连接池(),它在启动时打开10个连接。Netstat似乎证实了这一点:Hibernate JDBC连接是否应该与netstat网络连接匹配?,hibernate,postgresql,tomcat,jdbc,transactions,Hibernate,Postgresql,Tomcat,Jdbc,Transactions,我们有一个Tomcat6/Hibernate 3.x/Postgres应用程序,我对应用程序服务器和数据库之间的“连接”有点茫然,至少就JDBC而言是这样 表面上,我们使用的是一个连接池(),它在启动时打开10个连接。Netstat似乎证实了这一点: netstat -nato | grep 5432 ::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) ::ffff:192.168.42.11:5432 ESTABLISHED off
netstat -nato | grep 5432
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0)
但这些连接始终处于“关闭”状态。当我将Hibernate日志设置为DEBUG for JDBC时,我看到大量的openConnection()
和closeConnection()
调用(对于一个简单的网页,调用次数超过100次),但netstat的输出保持不变
那么,JDBC和网络连接不是以1:1的比例创建的吗?这只是连接池实际工作的证据吗 这就是工作原理。该池打开N个物理数据库连接,当应用程序获得连接时,它将获得一个代理,而不是实际的驱动程序连接对象
当应用程序事务完成时,将调用该方法。代理将拦截close
方法,并将连接对象简单地返回到池中,而不是实际关闭物理连接
您看到如此多的openConnection()
和closeConnection()
方法的原因可以解释如下:
- 您使用的是JTA,它要求基于每条语句
- 您没有将操作封装在单个@Transactional服务方法中,Hibernate默认为自动提交,因此每个语句都将在其自己的特定事务中运行(并且每个语句实际上都需要一个连接获取/释放周期)
- 您大量使用Ajax,因此加载首页不仅仅是一个HTTP请求。您发出的异步请求越多,需要的事务就越多,对连接池施加的压力就越大
为了监视和优化您的连接池,我建议您开始使用 是的,这是游泳池工作的证据。谢谢你的回复,EJP。不过有点困惑:远程运行jconsole会向我显示池清理器,但没有其他与池相关的线程。可以安全地假设这只是我们的应用程序和jconsole的配置问题?为什么会有其他线程与池相关?老实说,我不确定应该在输出中看到什么。我想我希望池中的每个连接都有一个单独的线程(我没有任何理由这样做;我正在学习这一点)。再次感谢你的帮助。我们在Hibernate事务中使用autocommit,并且我们已经将发布模式设置为“自动”(我们没有使用JTA)。我将查看FlexyPool。谢谢一旦我有了足够的代表,我就投票支持这个答案——非常好地解释了JDBC和物理连接之间的关系。谢谢你的好话。如果您有任何其他与Hibernate/transactions/JDBC/Spring/Database相关的有趣问题(如本文),您可以ping我,我来看看。FlexyPool是一个小型但功能强大的实用程序,我们行业的一些主要参与者(美国和瑞士的银行)正在使用它。