我对使用Dropwizard用Java编写的RESTful应用程序进行了一些集成测试。测试套件运行良好,直到最终挂起,并且出现C3P0PooledConnectionPoolManager
异常:java.sql.SQLNonTransientConnectionException: Too many connections
我确定在使用C3P0Registry.getPooledDataSources()
进行每次测试后都没有清除连接,但是我误诊了该问题,原因是未关闭我的球衣响应实体,详情如下:https://jersey.github.io/documentation/latest/client.html#d0e5255
许多测试仅在检查状态码,所以对我来说这将是有道理的(在链接中指出:“如果您不阅读实体,则需要关闭响应response.close()
“手动)。但是,解决此问题并确保关闭每个实体后,我仍然在测试之间保持持久连接。
我将DropwizardAppRule
用作类规则,并在每次测试运行的开始和结束创建之后,可以调用关闭与该规则关联的客户端,但是连接保持打开状态。我的C3P0ConnectionPool
在每个运行的测试类中获得3个连接,而我想不出一种方法来阻止它随着添加的每个新类的增长而增长。
ClassRule代码段:
@ClassRule
public static final DropwizardAppRule<MicroServiceCoreConfiguration> RULE =
new DropwizardAppRule<>(App.class, ResourceHelpers.resourceFilePath("./config.yml"));
将使用请求的任何信息进行更新!