DropwizardAppRule ClassRule не освобождает соединения после завершения теста - PullRequest
1 голос
/ 04 апреля 2019

У меня есть несколько интеграционных тестов для приложения 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"));

Будет обновляться с любой запрашиваемой информацией!

...