Wie schließe ich eine java.sql.DataSource?

8

Wir haben ein System, in dem Daten nach Datum partitioniert sind. So haben wir beispielsweise in SqlServer eine Datenbank pro Monat mit Daten. Jede Monatspartition verwendet eine Jdbc-Treiber-Datenquelle, die in eine C3P0-Verbindungspool-DataSource eingebettet ist.

Nach einer gewissen Zeit wird der Datumsbereich der Partition alt genug, dass wir sie offline schalten wollen. In diesem Fall entfernen wir einfach die DataSource des jeweiligen Monats aus der verfügbaren Liste. Im Idealfall möchte ich beim Offlining jedoch die DataSource "schließen", damit der Pool alle Verbindungen zur DB aufgibt.

DataSource hat keine nahe Methode für mich anzurufen, also bin ich nicht sicher, wie man das aufräumt.

Irgendwelche Vorschläge?

    
Mike Q 05.07.2011, 08:29
quelle

3 Antworten

7

Wenn Sie C3PO gepoolte DataSources verwenden, können Sie Threads und Verbindungen freigeben, die mit der DataSource verknüpft sind, indem Sie DataSources.destroy (DataSource) .

    
sudocode 05.07.2011, 08:36
quelle
9

Sie schließen nicht DataSource - Sie schließen die Verbindung returned mit einem DataSource . Das DataSource selbst ist niemals als solches "offen".

Ich würde erwarten, dass der Pool offene Verbindungen nach einer Auszeit aufgibt, also schlage ich vor, dass Sie sich darüber keine Gedanken machen :) Wenn Sie die Verbindungen zwangsweise schließen müssen, müssen Sie einen Verweis darauf behalten den Verbindungspool selbst verwenden und alle von c3p0 bereitgestellten Funktionen direkt verwenden.

    
Jon Skeet 05.07.2011 08:32
quelle
1

In meinem Fall funktionierte die Antwort von @ sudocode nicht, also habe ich die gepoolte Datenquelle erhalten und sie geschlossen:

%Vor%     
jelies 12.07.2013 13:12
quelle

Tags und Links