Detaillierte Erläuterung des Java -Datenbankverbindungspools
Das Prinzip der Datenbankverbindungspooling lautet:
Die Grundidee des Verbindungspoolings besteht darin, die Datenbankverbindung als Objekt im Speicher zu speichern, wenn das System initialisiert wird. Wenn der Benutzer auf die Datenbank zugreifen muss und anstatt eine neue Verbindung herzustellen, wird ein etabliertes kostenloses Verbindungsobjekt aus dem Verbindungspool herausgenommen. Nach dem Gebrauch schließt der Benutzer die Verbindung nicht, sondern stellt die Verbindung zurück in den Verbindungspool, um den Zugriff auf die nächste Anforderung zu erhalten. Die Einrichtung und Trennung von Verbindungen werden vom Verbindungspool selbst verwaltet. Gleichzeitig können Sie auch die anfängliche Anzahl der Verbindungen im Verbindungspool, die oberen und unteren Verbindungsgrenzen, die maximale Anzahl der Verwendungszeiten für jede Verbindung, die maximale Leerlaufzeit usw. steuern, indem Sie die Parameter des Verbindungspools festlegen. Es kann auch die Anzahl der Datenbankverbindungen, Verwendung usw. über einen eigenen Verwaltungsmechanismus überwachen.
Häufig verwendete Datenbankverbindungspools:
Zu den häufig verwendeten Datenbankverbindungspools gehören JNDI, C3P0, APACHE JAKARTA und DBCPBONECP. Unter ihnen verwenden Dritte, die sich auf das Sing -Framework verlassen, C3P0 und DBCP. Und Bonecp soll der schnellste Datenbankverbindungspool sein. Die von der JNDI -Methode erstellte DataSource implementiert wirklich javax.sql.datasource (keine der anderen drei Methoden)
Jetzt werden wir hauptsächlich vorstellen, wie die JNDI -Methode verwendet wird. Diese Methode wird von einem Webserver (z. B. Tomcat, Weblogic, WebSphere, Tomcat) implementiert, um java.sql.datasource zu implementieren. Der Webserver ist für die Initialisierung der Datenquelle, das Erstellen von Verbindungen, die Zuordnung und Verwaltung von Verbindungen verantwortlich. Da es sich um eine Funktion handelt, die von einem Webserver selbst implementiert wird, ist es nicht erforderlich, spezielle JAR -Pakete in das Projekt einzuführen. Es müssen jedoch einige Konfigurationsdateien des Servers relevante Konfigurationen hinzufügen. Nehmen Sie anschließend den Tomcat -Server (die Datenbank ist MySQL) als Beispiel, um die Verwendung dieser Methode zu beschreiben.
Datenbankerstellung und Initialisierung:
TABELLE -Test erstellen (ID int Primärschlüssel, Name Varchar (10), Preisfloat) In Testwerte (1, 'Englisch', 22.2) einfügen; Einfügen in Testwerte (2, 'Math', 78.9); Einfügen in Testwerte (3, 'History', 77,9);
1. Setzen Sie den Datenfahrer MySQL-Connector-Java-5.0.3 --Bin.jar in die LIB im Tomcat-Verzeichnis ein
2. Ändern Sie die Datei context.xml unter Tomcats Conf und fügen Sie Unterstützung für die Ressourcenkonfiguration hinzu
<Ressourcenauth = "Container" driverClassName = "com.mysql.jdbc.driver" maxactive = "100" maxidle = "30" maxwait = "10000" name = "jdbc/ewsdb" username = "root" password = "admin" type = "javax.sql.datasource" " url = "jdbc: mysql: // localhost: 3306/test1"/>
<Ressourcenattribut Beschreibung>
1) Name: Geben Sie den JNDI -Namen der Ressource an.
2) Auth: Gibt den Manager an, der die Ressource verwaltet, die zwei optionale Werte enthält: Container und Anwendung. Container bedeutet, dass der Container die Ressource erstellt und verwaltet, und die Anwendung bedeutet, dass die Webanwendung die Ressource erstellt und verwaltet.
3) Typ: Geben Sie den Java -Klasse -Namen der Ressource an.
4) Benutzername: Geben Sie den Benutzernamen an, um eine Verbindung zur Datenbank herzustellen.
5) Passwort: Geben Sie das Kennwort an, um eine Verbindung zur Datenbank herzustellen.
6) TRAVERCLASSNAME: Gibt den Namen der Treiber -Implementierungsklasse im JDBC -Laufwerk an, der eine Verbindung zur Datenbank herstellt.
7) URL: Geben Sie die URL an, um eine Verbindung zur Datenbank herzustellen. 127.0.0.1 ist die IP des Datenbankservers, mit dem 3306 der Datenbankserver -Port und BookDB der Datenbankname ist.
8) MaxActive: Gibt die maximale Anzahl aktiver Datenbankverbindungen im Datenbankverbindungspool an. Der Wert ist 0, was darauf hinweist, dass er nicht eingeschränkt ist.
9) Maxidle: Gibt die maximale Anzahl von Datenbankverbindungen im Datenbankverbindungspool an, die im Leerlauf sind. Der Wert ist 0, was darauf hinweist, dass er nicht eingeschränkt ist.
10) Maxwait: Gibt die maximale Zeit (in Millisekunden) an, damit der Datenbankverbindungspool im Leerlauf ist. Nach dieser Zeit wird eine Ausnahme ausgelöst. Der Wert ist -1, was bedeutet, dass Sie auf unbestimmte Zeit warten können.
MaxActive = "100"
Gibt die maximale Anzahl von Verbindungen an, die aus dem Verbindungspool in Parallelität erhalten werden können. Wenn die Datenbank nicht allein für eine Anwendung verwendet wird, kann das Einstellen des maxaktiven Parameters verhindern, dass eine Anwendung unbegrenzte Verbindungen von anderen Anwendungen erhält. Wenn eine Datenbank nur zur Unterstützung einer Anwendung verwendet wird, kann MaxActive theoretisch auf die maximale Anzahl von Verbindungen eingestellt werden, die die Datenbank unterstützen kann. MaxActive repräsentiert einfach die maximale Anzahl von Verbindungen, die gleichzeitig über den Verbindungspool erhalten werden können. Die Akquisition und Freisetzung von Verbindungen erfolgt auf zwei Wege. Wenn die Anwendung gleichzeitig den Verbindungspool anfordert, muss der Verbindungspool die Verbindung aus der Datenbank abrufen. Wenn die Anwendung die Verbindung verwendet und die Verbindung zum Verbindungspool zurückgibt, gibt der Verbindungspool die Verbindung gleichzeitig auch zur Datenbank zurück? Offensichtlich ist die Antwort nein. In diesem Fall wird der Verbindungspool unnötig, was nicht nur die Leistung verbessert, sondern stattdessen die Leistung verringert. Wie kann man also mit der Verbindung umgehen, nachdem sie zurückgegeben wurde?
Maxidle = "30"
Wenn maxActive = 100 während der Parallelität erreicht wird, muss der Verbindungspool 100 Verbindungen aus der Datenbank erhalten, um die Verwendung der Verwendung zur Verfügung zu stellen. Wenn die Anwendung die Verbindung schließt, werden nicht alle Verbindungen in die Datenbank zurückgegeben. 30 Verbindungen werden im Verbindungspool gehalten und der Status ist im Leerlauf.
minidle = "2"
Das Minimum wird standardmäßig nicht wirksam. Seine Bedeutung ist, dass der Systemüberwachungsfaden, wenn es nur wenige Minideln im Verbindungspool gibt, die ergänzende Funktion startet. Im Allgemeinen beginnen wir den ergänzenden Thread nicht.
Frage: Wie setze ich MaxActive und Maxidle?
Theoretisch sollte MaxActive auf die maximale Parallelitätszahl der Anwendungen eingestellt werden, sodass die Anwendung selbst im Falle einer maximalen Parallelität auch Verbindungen aus dem Verbindungspool erhalten kann. Die Schwierigkeit ist jedoch, dass es für uns schwierig ist, die maximale Parallelitätszahl genau zu schätzen. Das Einstellen der maximalen Parallelitätsnummer ist eine optimale Servicequalitätssicherung.
Die entsprechenden Verbindungen von Maxidle sind tatsächlich lange Verbindungen, die vom Verbindungspool aufrechterhalten werden. Dies ist auch der Teil, in dem der Verbindungspool seine Vorteile spielt. Theoretisch kann die Aufrechterhaltung von langen Verbindungen bei der Anwendung von Anforderungen schneller reagieren. Wenn Sie jedoch zu viele Verbindungen aufrechterhalten, werden in der Datenbank eine große Anzahl von Ressourcen verbraucht. Je größer das Maxidle ist, desto besser. Im gleichen Beispiel wie oben empfehlen wir, Maxidle in 50-100 auf eine Zahl nahe 50 zu setzen, wie z.
3. Öffnen Sie die Web.xml -Datei der Anwendung und fügen Sie die folgende Konfiguration hinzu
<ressourcen-ref> <beschreibung> DB-Verbindung </Beschreibung> <res-ref-name> jdbc/ewsdb </res-ref-name> <res-type> javax.sql.datasource </res-type> <res-auth> container </res-auth> </ressourcen-ref>
<ressourcenref> Attributbeschreibung:
1) Beschreibung: Eine Erläuterung der referenzierten Ressource.
2) res-ref-name: Gibt den JNDI-Namen der referenzierten Ressource an, das dem Namensattribut des Namens im <ressource> -Element entspricht.
3) res-type: Gibt den Klassennamen der referenzierten Ressource an, das dem Typ-Attribut im Element <ressource> entspricht.
4) res-auth: Geben Sie den Manager an, der die referenzierten Ressourcen verwaltet, die dem Authattribut im Element <ressourcen> entspricht
4. Schreiben Sie Java -Code und setzen Sie ihn wie folgt in die Tomcat -Umgebung ein
JSP -Beispiel erstellen: myjsp.jsp
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html public "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><%@ Page import =" java.io.*"%> <%@ page import =" java.util.*"%> <%@ page import =" java.sql. import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.sql. %> <html> <kopf> <titels> JNDI -Datenbankverbindungspool unter Tomcat </title> </head> <body> < % try {connection conn; Erklärung StMT; Ergebnisset Rs; Kontext ctx = new initialContext (); DataSource DS = (DataSource) ctx.lookup ("Java: comp/env/jdbc/ewsdb"); conn = ds.getConnection (); STMT = Conn.CreateStatement (); // Abfragen von Aufzeichnungen rs = stmt.executeQuery ("ID, Name, Preis vom Test"); // Ausgabe von Abfrageergebnis OUT.println ("<Table Border = 1 Width = 400>"); while (rs.Next ()) {String col1 = rs.getString (1); String col2 = rs.getString (2); float col3 = rs.getfloat (3); // Die angezeigten Daten ausdrucken.println ("<tr> <td>"+col1+"</td> <td>"+col2+"</td> <td>"+col3+"</td> </tr>");} out.println ("</table>"); // Schließen Sie die Ergebnismenge, die SQL -Deklaration und die Datenbankverbindung rs.close (); stmt.close (); conn.close (); } catch (Ausnahme e) {out.println (e.getMessage ()); E. printstacktrace (); } %> </body> </html>Geben Sie http: // localhost: 8080/test/myjsp.jsp in Ihrem Browser ein, um die Ergebnisse anzuzeigen
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!