Um den C3P0 optimal zu implementieren, überprüfen Sie diese Antwort
C3P0 :
Für Unternehmensanwendungen ist C3P0 der beste Ansatz. C3P0 ist eine benutzerfreundliche Bibliothek zum Erweitern traditioneller (DriverManager-basierter) JDBC-Treiber mit JNDI-bindbaren DataSources, einschließlich DataSources, die Connection and Statement Pooling implementieren, wie in der jdbc3-Spezifikation und der jdbc2-Standarderweiterung beschrieben. C3P0 handhabte auch DB-Trennungen und transparente Wiederverbindungen bei Wiederaufnahme robust, während DBCP Verbindungen nie wiederherstellte, wenn die Verbindung darunter herausgenommen wurde.
Aus diesem Grund haben c3p0 und andere Verbindungspools auch Anweisungscaches vorbereitet. Dadurch kann der Anwendungscode vermeiden, sich mit all dem zu befassen. Die Anweisungen werden normalerweise in einem begrenzten LRU-Pool gespeichert, sodass allgemeine Anweisungen eine PreparedStatement-Instanz wiederverwenden.
Schlimmer noch, DBCP gab Verbindungsobjekte an die Anwendung zurück, für die der zugrunde liegende Transport unterbrochen wurde. Ein häufiger Anwendungsfall für c3p0 besteht darin, das in Apache Tomcat enthaltene Standard-DBCP-Verbindungspooling zu ersetzen. Oft stößt ein Programmierer auf eine Situation, in der Verbindungen im DBCP-Verbindungspool nicht korrekt recycelt werden und c3p0 in diesem Fall ein wertvoller Ersatz ist.
In aktuellen Updates hat C3P0 einige brillante Funktionen. diese sind unten angegeben:
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setMinPoolSize();
dataSource.setMaxPoolSize();
dataSource.setMaxIdleTime();
dataSource.setMaxStatements();
dataSource.setMaxStatementsPerConnection();
dataSource.setMaxIdleTimeExcessConnections();
Hier definieren die Poolgrößen max und min die Verbindungsgrenzen, dh wie die minimale und maximale Verbindung diese Anwendung nimmt. MaxIdleTime()
Definieren Sie, wann die Leerlaufverbindung freigegeben wird.
DBCP :
Dieser Ansatz ist ebenfalls gut, weist jedoch einige Nachteile auf, wie z. B. Verbindungszeitlimit und Verbindungsfreigabe. C3P0 ist gut, wenn wir Mutithreading-Projekte verwenden. In unseren Projekten haben wir mehrere Thread-Ausführungen gleichzeitig mithilfe von DBCP verwendet. Wenn wir mehr Thread-Ausführungen verwendet haben, haben wir ein Verbindungszeitlimit. Also haben wir uns für die c3p0-Konfiguration entschieden. Ich würde DBCP überhaupt nicht empfehlen, insbesondere wenn es darum geht, Verbindungen aus dem Pool zu werfen, wenn die Datenbank nicht mehr verfügbar ist, wenn es nicht möglich ist, die Verbindung wiederherzustellen, wenn die Datenbank zurückkommt, und wenn es nicht möglich ist, Verbindungsobjekte dynamisch wieder in den Pool aufzunehmen (es bleibt für immer hängen ein Post-JDBCconnect-E / A-Socket gelesen)
Vielen Dank :)