为什么Hibernate会向MySQL数据库打开许多端口?

时间:2017-02-08 11:43:01

标签: mysql hibernate spring-boot hibernate-criteria

我正在使用Vaadin和Hibernate开发一个Spring Boot应用程序,我遇到了hibernate MySQL的问题,每次我查询数据库时都会打开MySQL数据库的新端口。

当我执行netstat -ano | grep 3306时,我得到了这个:

  TCP    127.0.0.1:62066        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62067        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62068        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62070        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62071        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62072        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62073        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62074        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62075        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62076        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62077        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62079        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62080        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62081        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62082        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62083        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62084        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62085        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62086        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62092        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62093        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62094        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62095        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62096        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62097        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62098        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62099        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62101        127.0.0.1:3306         ESTABLISHED     10956
  TCP    127.0.0.1:62102        127.0.0.1:3306         ESTABLISHED     10956 ....... 

我该怎么做才能避免这种情况?

3 个答案:

答案 0 :(得分:2)

因为您的ConnectionPoolManager创建了一些由应用程序重用的连接数。多个连接允许您的应用程序以并发方式使用DB。您可以使用void Text2() { textComponent.text += "\nHey"; } hibernate.cfg.xml缩小该值。关于如何做到这一点,你必须阅读你正在使用的persistance.xml文档(内置或例如。ConnectionPoolManager

您可以尝试共享配置文件以供将来帮助。

答案 1 :(得分:0)

从代码片段中我假设您正确打开和关闭会话。 如果需要,会话从数据源检索连接,因此在完成操​​作后关闭它是至关重要的。

如果似乎打开的连接增加,那么您就会发生连接泄漏。

如果在整个应用程序的生命周期中看到稳定数量的连接打开,那么您需要检查数据源配置以及设置打开的连接数。

例如,当谈到c3p0数据源时 对于 cpds.setMinPoolSize(5)

无论如何,你都会打开5个连接。

答案 2 :(得分:0)

我找到了解决方案。问题在于Hibernate,它没有自动关闭会话,以解决问题,我只是设置了hibernate connection release mode。对我来说,我在application.properties中设置了这些hibernate属性:

#hibernate properties
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
spring.jpa.properties.hibernate.transaction.auto_close_session=true
spring.jpa.properties.hibernate.connection.release_mode=after_statement