Как я могу закрыть java.sql.DataSource - PullRequest
8 голосов
/ 05 июля 2011

У нас есть система, в которой данные разбиты по дате.Так, например, в SqlServer у нас есть одна база данных в месяц данных.Каждый раздел месяца использует источник данных драйвера Jdbc, помещенный в пул данных C3P0.

Через некоторое время диапазон дат раздела становится достаточно старым, и мы хотим отключить его.В этом случае мы просто удаляем соответствующий источник данных за месяц из доступного списка.Однако в идеале при отключении я хотел бы «закрыть» DataSource, чтобы пул освобождает все соединения с БД.

DataSource не имеет метода close для меня, поэтому я не уверен, как его очиститьup.

Есть предложения?

Ответы [ 3 ]

9 голосов
/ 05 июля 2011

Вы не закрываете DataSource - вы закрываете соединение , возвращаемое на DataSource. Сам по себе DataSource никогда не является «открытым» как таковым.

Я бы ожидал, что пул освободит открытые соединения после тайм-аута в любом случае, поэтому я советую вам не беспокоиться об этом :) Если вам нужно принудительно закрыть соединения, вам нужно сохранить ссылку на сам пул соединений и использовать любые возможности, предоставляемые c3p0 напрямую.

7 голосов
/ 05 июля 2011

Похоже, если вы используете C3PO pooled DataSources, то вы можете освободить потоки и соединения, связанные с DataSource, используя DataSources.destroy (DataSource) .

1 голос
/ 12 июля 2013

В моем случае ответ @ sudocode не сработал, поэтому я получил объединенный источник данных и закрыл его:

ComboPooledDataSource datasource =
                (ComboPooledDataSource) envContext.lookup("jdbc/oracledb");
datasource.close();
...