Spring 使用@MockBean 启动集成测试不释放 jdbc 个连接

Spring Boot Integration Tests With @MockBean don't release jdbc connections

我对集成测试有疑问。

我们正在使用 spring boot 1.4.4 + spring batch + testcontainers + postgres。

每个集成测试注释:

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

问题是:

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

所以在每次这样的测试之前,我可以 select 来自 postgres 的连接数:

select sum(numbackends) from pg_stat_database;

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

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

请问如何解决?

看起来像注解+所有@MockBean的组合类计算出某种"hash".

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

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

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