У меня есть несколько интеграционных тестов для приложения RESTful, написанного на Java с использованием Dropwizard. Набор тестов работает нормально, пока в конце концов он не зависнет, и я получу исключение с C3P0PooledConnectionPoolManager
: java.sql.SQLNonTransientConnectionException: Too many connections
Я определил, что соединения не очищаются после каждого теста, используя C3P0Registry.getPooledDataSources()
, но я неправильно диагностировал проблему как не закрывающую мои сущности ответа джерси, как подробно описано здесь: https://jersey.github.io/documentation/latest/client.html#d0e5255
Многие из тестов проверяют только код состояния, поэтому для меня имело смысл, что это будет происходить (в ссылке указано: «Если вы не читаете объект, вам нужно закрыть ответ»). вручную response.close()
"). Однако после исправления этой проблемы и обеспечения того, чтобы каждая сущность была закрыта, я по-прежнему получаю постоянные соединения между тестами.
Я использую DropwizardAppRule
в качестве правила класса, и после создания в начале и конце каждого запуска теста я могу позвонить, чтобы закрыть клиент, связанный с правилом, но соединения остаются открытыми. Мой C3P0ConnectionPool
получает 3 соединения на каждый запущенный тестовый класс, и я не могу найти способ остановить его рост с каждым добавленным новым классом.
Фрагмент ClassRule:
@ClassRule
public static final DropwizardAppRule<MicroServiceCoreConfiguration> RULE =
new DropwizardAppRule<>(App.class, ResourceHelpers.resourceFilePath("./config.yml"));
Будет обновляться с любой запрашиваемой информацией!