[JAVA] Einstellungen für den Verbindungspool in Tomcat.jdbc

Ursache: Das folgende Fehlerprotokoll hat Sie daran gehindert, eine Verbindung zu JDBC herzustellen.

 Cased by: java.sql.SQLRecoverableException:Es ist eine geschlossene Verbindung.
```
 Gegenmaßnahme: Fügen Sie die Überprüfungsabfrage von "SELECT 1 FROM DUAL" (Oracle) in setValidationQuery ein und geben Sie setTestOnBorrow (true) an, um das Objekt zu überprüfen und zu verwerfen und die Verbindung wiederherzustellen, da jedoch viele andere Parameter vorhanden sind Ich winkte mit einem Kommentar in der Liste.


    public org.apache.tomcat.jdbc.pool.DataSource createDefaultDataSource() {
        org.apache.tomcat.jdbc.pool.DataSource datasource = null;
        PoolConfiguration p = new DefaultProperties();
 // Registrieren Sie den Verbindungspool als ConnectionPoolMBean. Der Anfangswert ist true
        p.setJmxEnabled(true);

 // Gibt an, ob eine Validierungsabfrage für die inaktive Verbindung ausgegeben werden soll, um die Verbindung mit der Datenbank zu überprüfen. Eine Thread-Version von testOnBorrow, testOnReturn. Wenn true angegeben ist, wird das Objekt verworfen, das tatsächlich nicht mit der Datenbank kommunizieren kann. Wenn validationQuery nicht angegeben ist, tun Sie nichts. Dieser Test wird nach dem obigen minEvictableIdleTimeMillis-Test durchgeführt. Der Anfangswert ist falsch.
        p.setTestWhileIdle(false);
        p.setTestOnBorrow(false);
        p.setTestOnReturn(false);

 // Auf true setzen, um geschlossene Auslassungsverbindungen zu erkennen
        p.setRemoveAbandoned(false);

 // Festlegen, dass der Stack-Trace der Anwendung ausgegeben wird, die die Verbindung zum Protokoll nicht geschlossen hat, wenn eine schließende Auslassung festgestellt wird.
        p.setLogAbandoned(false);

 // Legen Sie die Abfrage fest, mit der Leben und Tod der Verbindung überprüft werden. Wenn null oder ein leeres Zeichen angegeben wird, wird keine Überprüfung durchgeführt. Der Standardwert ist null.
        p.setValidationQuery(null);

 // Wenn die aus dem Pool erhaltenen Verbindungen länger als das hier angegebene Intervall (Millisekunden) gepoolt wurden, überprüfen Sie die Lebendigkeit der Verbindungen. Der Anfangswert ist 10000
        p.setValidationInterval(1800000);

 // Geben Sie das Thread-Ausführungsintervall (Millisekunden) an. Wenn es kleiner als 1 ist, wird der Thread nicht ausgeführt. Daher hat in diesem Fall die folgende Parametergruppe keine Bedeutung, selbst wenn sie angegeben ist. Der Standardwert ist -1, daher funktioniert dieser Thread standardmäßig nicht.
        p.setTimeBetweenEvictionRunsMillis(10);

 // Zeit, die als enge Auslassung betrachtet werden muss Der Anfangswert beträgt 60 Sekunden
        p.setRemoveAbandonedTimeout(180);

 // Zeitpunkt, zu dem die Leerlaufverbindung im Pool bleiben kann. Wenn diese Zeit vergangen ist, seit die Verbindung inaktiv war (in Millisekunden), wird sie getrennt und verworfen. Weniger als 1 bedeutet unbegrenzt und wird niemals zerstört. Wenn Sie die folgenden testWhileIdle-Funktionen nutzen möchten, ist es nicht sinnvoll, unbegrenzt anzugeben. Der Anfangswert ist 1800000 (30 Minuten).
        p.setMinEvictableIdleTimeMillis(1800000);

 // Anfangsgröße der Verbindung, die beim Start des Pools erstellt wird Der Anfangswert ist 10
        p.setInitialSize(1);

 // Maximale Anzahl aktiver Verbindungen, die gleichzeitig aus dem Pool zugewiesen werden können Der Anfangswert beträgt 100
        p.setMaxActive(1);

 // Maximale Anzahl von Verbindungen, die im Pool aufbewahrt werden sollen Der Anfangswert ist maxActive
        p.setMaxIdle(1);

 // Mindestanzahl der Verbindungen, die im Pool aufbewahrt werden sollen Der Anfangswert ist initialSize
        p.setMinIdle(1);

 // Maximale Wartezeit, wenn keine Verbindung verfügbar ist (in Millisekunden) Der Anfangswert ist 30000 = (30 Sekunden)
        p.setMaxWait(30000);

 // Zeit zum Halten der Verbindung (in Millisekunden) Wenn bei der Rückgabe der Verbindung maxAge oder mehr von der Verbindungszeit vergangen sind, schließen Sie die Verbindung. Überprüfen Sie nicht mit maxAge. Der Anfangswert ist 0
        p.setMaxAge(180000);

 // Auf true setzen, wenn getConnection-Aufrufe in der FIFO-Methode fair behandelt werden sollen. Wenn Sie diesen Wert auf true setzen, wird die Implementierung org.apache.tomcat.jdbc.pool.FairBlockingQueue für die Liste der inaktiven Verbindungen verwendet. Der Anfangswert ist true, wodurch sichergestellt wird, dass Verbindungen in der Reihenfolge erfasst werden, in der die Threads ankommen.
        p.setFairQueue(false);
        datasource = new org.apache.tomcat.jdbc.pool.DataSource();
        datasource.setPoolProperties(p);
        return datasource;
    }
 


Recommended Posts

Einstellungen für den Verbindungspool in Tomcat.jdbc
Ich habe versucht, polymorph in Nogizaka zu implementieren.
Einstellungen zum Anzeigen von japanischem Javadoc in IntelliJ IDEA
Ausgabeeinstellungen an die Debug-Konsole in Visual Studio Code
Debuggen mit Eclipse
Joystick-Einstellungen in OpenDS
So ändern Sie den Einstellungswert von application.properties beim Booten im Frühjahrsstart
Gradle-Einstellungsnotiz (Multiprojekt für alle in einem) für mich