我正在使用Liquibase集成的Spring Boot应用程序来设置数据库。我们使用不同的用户来更改我们使用application.properties文件配置的数据库更改
liquibase.user=abc
liquibase.password=xyz
liquibase.url=jdbc:postgresql://something.eu-west-1.rds.amazonaws.com:5432/app?ApplicationName=${appName}-liquibase
liquibase.enabled=true
liquibase.contexts=dev,postgres
我们目前在部署中有3个不同的微服务,我们注意到,对于每个正在运行的实例,Liquibase打开10个连接,除非我们停止应用程序,否则它永远不会关闭这些连接。这基本上意味着在开发过程中我们会定期达到Amazon RDS实例的连接限制。
目前,在开发过程中,74个活动连接中有40个被Liquibase占用。如果我们想要通过这种方式进行生产,为所有微服务启用了自动调节,那就意味着我们不得不超量扩展数据库,以免达到任何连接限制。
有没有办法
到目前为止,我找不到有关如何执行此操作的文档。
答案 0 :(得分:4)
感谢Slava的响应,我设法通过以下数据源配置类来解决问题
@Override
protected void onResume() {
super.onResume();
// save values here for resume
}
可以在Tomcat网站上找到属性的文档:https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
所以它似乎不是连接泄漏,它只是数据源的默认配置,如果使用专用数据源,它对于Liquibase 来说不是最佳的。如果liquibase数据源是您的主要数据源,我不认为这是一个问题。
答案 1 :(得分:3)
对连接池管理的更改是在Spring Boot版本2.0.6.RELEASE
中引入的,并且仅在使用Spring Boot Actuator时才生效。有一个执行器端点(默认情况下启用),使您可以获取Liquibase应用的更改集。为此,Liquibase使其数据库连接保持打开状态。您可以使用management.endpoint.liquibase.enabled = false
禁用端点,在这种情况下,Liquibase使用的连接池将在初次运行后关闭。
12. Liquibase
:https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/actuator-api/html/ 答案 2 :(得分:1)
我不知道为什么liquibase没有关闭连接,也许这是一个bug,你应该create an issue。
要为liquibase设置连接池,您必须创建自定义数据源并使用@LiquibaseDataSource
注释对其进行标记。
相关问题提供了更多详细信息: