Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Hibernate会向MySQL数据库打开许多端口?_Mysql_Hibernate_Spring Boot_Hibernate Criteria - Fatal编程技术网

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

为什么Hibernate会向MySQL数据库打开许多端口?,mysql,hibernate,spring-boot,hibernate-criteria,Mysql,Hibernate,Spring Boot,Hibernate Criteria,我正在使用Vaadin和Hibernate开发一个springboot应用程序,hibernatemsql有一个问题,每次我查询数据库时,它都会向MySQL数据库打开一个新端口 当我执行netstat-ano | grep3306时,我得到如下结果: TCP 127.0.0.1:62066 127.0.0.1:3306 ESTABLISHED 10956 TCP 127.0.0.1:62067 127.0.0.1:3306

我正在使用Vaadin和Hibernate开发一个springboot应用程序,hibernatemsql有一个问题,每次我查询数据库时,它都会向MySQL数据库打开一个新端口

当我执行netstat-ano | grep3306时,我得到如下结果:

  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 ....... 

我能做些什么来避免这种情况?

这是因为您的ConnectionPoolManager创建了大量由应用程序恢复的连接。多个连接允许应用程序以并发方式使用DB。您可以使用
hibernate.cfg.xml
persistence.xml
将其缩小。关于如何做到这一点,您必须阅读您正在使用的
ConnectionPoolManager
文档(内置或例如
C3P0


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

从代码片段中,我想您可以正确地打开和关闭会话。 如果需要,会话将从数据源检索连接,因此在完成操作后关闭连接至关重要

如果似乎打开的连接增加,则表明存在连接泄漏

如果在应用程序的整个生命周期中看到有稳定数量的连接处于打开状态,则需要检查数据源配置以及设置为打开的连接数

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


无论发生什么情况,您都将有5个连接打开。

我找到了一个解决方案。问题是在Hibernate中,它不会自动关闭会话,为了解决问题,我只设置了一个
Hibernate连接释放模式
。对于我来说,我在
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

您能提供一个查询示例吗?我是说打开会话的方法发出查询并关闭会话?谢谢。谢谢@Antoniossss为您提供的时间,我可以为您提供一个如何进行的链接吗?@MounirBoussetta这里您有
Spring
s配置,但我不能保证这适用于您-您没有提到任何关于您当前配置的内容(也没有提到您正在使用Spring;P)谢谢@gkatzioura,我将尝试C3P00,无需更改数据源。只需根据当前数据源检查您已设置为强制打开的连接数。是否有方法在application.properties中的spring buil中设置连接数?是的,检查此链接,但不确定其是否适用于您的配置我尝试使用此配置c3p0,但仍然存在相同的问题:
@Bean public ComboPooledDataSource dataSource(){ComboPooledDataSource cpds=new ComboPooledDataSource();cpds.setJdbcUrl(“jdbc:mysql://localhost:3306/mdb?user=root&password=);cpds.setDriverClass(“com.mysql.jdbc.Driver”);cpds.setInitialPoolSize(1);cpds.setMaxPoolSize(100);cpds.setMinPoolSize(2);cpds.setCheckoutTimeout(300);cpds.setMaxStatements(50);cpds.setIdleConnectionTestPeriod(300);返回cpds;}