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 注释修复它。
我对集成测试有疑问。
我们正在使用 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 注释修复它。