Тесты интеграции 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.

Другие вопросы по тегам