Spring Boot Integration测试@MockBean不发布jdbc连接

时间:2018-02-16 09:01:54

标签: spring-boot spring-batch integration-testing testcontainers

我遇到集成测试问题。

我们使用的是Spring boot 1.4.4 + spring batch + testcontainers + postgres。

每个集成测试注释:

@RunWith(SpringRunner.class)
@ActiveProfiles(value = { "integrationtest" })
@SpringBootTest(classes = ServiceApplication.class)

问题是:

看起来每个包含@MockBean批注的集成测试都会创建一个新的上下文。 每个新上下文都会创建一个具有10个连接的新连接池。 但是之前的背景并没有释放它的联系。

所以在每次这样的测试之前,我都可以从postgres中选择连接数:

select sum(numbackends) from pg_stat_database;

并且看到每个测试添加了10个新连接。

第10次测试因100个连接限制而失败。

你能建议如何解决它吗?

1 个答案:

答案 0 :(得分:1)

看起来注释+所有@MockBean类的组合会计算某种“哈希”。

每个“哈希”创建自己的上下文,并且spring缓存它。 默认情况下,每个包含创建自己的连接池,其中包含10个连接。

虽然所有上下文都被缓存,但所有连接池都有连接 - 这就是我的问题所在。

正如 jusermar10 所说,您可以使用@DirtiesContext注释修复它。