【发布时间】:2017-04-11 16:41:27
【问题描述】:
我有一个 Spring Boot 应用程序(版本 1.5.1.RELEASE),我使用 spring-boot-starter-data-jpa 作为依赖项来管理我的数据库。我使用 postgres 作为我的数据库并使用以下属性对其进行配置。
spring.datasource.url=${POSTGRES_URL}
spring.datasource.username=${POSTGRES_USER}
现在,当我运行几乎 120 个测试时,我在启动测试用例本身时收到太多客户端已经打开的错误,大约 10 个测试用例失败了。(其余 100 个测试用例成功通过,因为它们能够获取到数据库的连接)
我做的第一件事是在 postgres 服务器配置文件中将我的默认 postgres 最大连接数从 100 增加到 200,并且我的测试在此更改后成功通过。
现在我调查了一下并尝试设置连接池属性的参数,例如:
spring.datasource.tomcat.max-active=200
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.max-wait=10000
但是,这些属性不起作用,并且测试再次失败,并出现与上述相同的错误。我尝试阅读多个不同的博客和 spring 文档以设置连接池属性,但没有发现我可能出了什么问题。
我还认为,如果我将上述属性 spring.datasource.tomcat.max-active 设置为 100 个连接,它应该在 tomcat jdbc 池的帮助下工作,因为我认为在当前场景中它正在尝试为每个测试用例打开一个到数据库的新连接,并且我担心当我将此代码部署到生产环境时可能会发生同样的情况,并且将为每个请求打开到数据库的新连接。
以前有没有人遇到过这个问题,或者我做错了什么。
提前感谢您的帮助。
【问题讨论】:
-
您的数据库中配置的最大连接数是多少?是否有其他应用程序使用您的数据库?最好从数据库的角度检查/在数据库中监控连接数,应用程序中的连接泄漏在得出不正确的 application.properties 结论之前。
-
确保您正确关闭会话
-
@vivek 你在用hibernate orm吗
-
@KarthikPrasad 100 是数据库 postgresql.conf 中配置的最大连接数。当我将它们增加到 200 时,它工作正常。也没有其他应用程序使用此数据库。我认为如果连接池属性有效,100 个连接就足够了。
-
在不知道这 120 个测试在做什么的情况下很难为您提供帮助。 Spring Boot 没有做任何特别的事情,您可以根据需要手动配置数据源。但我敢打赌这不会有任何区别。
标签: spring-boot spring-data datasource