为什么Hibernate会向MySQL数据库打开许多端口?
我正在使用Vaadin和Hibernate开发一个springboot应用程序,hibernatemsql有一个问题,每次我查询数据库时,它都会向MySQL数据库打开一个新端口 当我执行netstat-ano | grep3306时,我得到如下结果:为什么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
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;}