我正在使用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 .......
我该怎么做才能避免这种情况?
答案 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