Тесты интеграции Spring Boot с @MockBean не освобождают соединения jdbc
У меня проблема с интеграционными тестами.
Мы используем пружинную загрузку 1.4.4 + пружинная партия + тестконтейнеры + 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 ответ
Выглядит как комбинация аннотаций + все классы @MockBean вычисляют своего рода "хэш".
Каждый "хэш" создает свой собственный контекст, а весна его кеширует. Каждый содержит создает свой собственный пул соединений с 10 соединениями по умолчанию.
Несмотря на то, что все контексты кэшируются, все пулы соединений содержат соединения - вот почему моя проблема.
Как сказал jusermar10, это можно исправить с помощью аннотации @DirtiesContext.