Heim > Java > javaLernprogramm > Ausführliche Erklärung und einfache Beispiele des Java-Datenbankverbindungspools

Ausführliche Erklärung und einfache Beispiele des Java-Datenbankverbindungspools

高洛峰
Freigeben: 2017-01-11 14:27:10
Original
1721 Leute haben es durchsucht

Detaillierte Erläuterung des Java-Datenbankverbindungspools

Das Prinzip des Datenbankverbindungspools ist:

Die Grundidee des Verbindungspools besteht darin, die Datenbankverbindung als Objekt im Speicher zu speichern Während der Systeminitialisierung muss der Benutzer auf die Datenbank zugreifen, anstatt eine neue Verbindung herzustellen. Nach der Verwendung schließt der Benutzer die Verbindung nicht, sondern stellt sie für die nächste Anfrage wieder in den Verbindungspool zurück. Der Verbindungsaufbau und -abbau wird vom Verbindungspool selbst verwaltet. Gleichzeitig können Sie auch die anfängliche Anzahl von Verbindungen im Verbindungspool, die Ober- und Untergrenze der Verbindungen, die maximale Anzahl der Verwendungen jeder Verbindung, die maximale Leerlaufzeit usw. steuern, indem Sie die Parameter der Verbindung festlegen Pool. Es kann auch die Anzahl, Nutzung usw. von Datenbankverbindungen über seinen eigenen Verwaltungsmechanismus überwachen.

Häufig verwendete Datenbankverbindungspools:

Zu den häufig verwendeten Datenbankverbindungspools gehören JNDI, C3p0, Apaches Jakarta und DBCPBoneCP. Unter anderem verwendet der Drittanbieter, auf den das Sping-Framework angewiesen ist, c3p0 und dbcp. Bonecp gilt als der schnellste Datenbankverbindungspool. Die in der JNDI-Methode erstellte Datenquelle implementiert tatsächlich javax.sql.datasource (die anderen drei Methoden sind es nicht)

Jetzt stellen wir hauptsächlich vor, wie die JNDI-Methode verwendet wird. Diese Methode wird vom Webserver gesteuert (z. B : tomcat, weblogic, websphere, tomcat), implementiert java.sql.datasource. Der Webserver ist für die Initialisierung der Datenquelle, die Erstellung von Verbindungen, die Zuweisung und die Verwaltung von Verbindungen verantwortlich. Da die Funktion selbst vom Webserver implementiert wird, ist es nicht erforderlich, ein spezielles JAR-Paket in das Projekt einzuführen, sondern es ist erforderlich, bestimmte Konfigurationsdateien des Servers um relevante Konfigurationen zu ergänzen. Nehmen Sie als Nächstes den Tomcat-Server (die Datenbank ist MySQL) als Beispiel, um die Verwendung dieser Methode zu beschreiben.

Daten zur Datenbankerstellung und -initialisierung:

create table test(id INT PRIMARY KEY,name VARCHAR(10),price FLOAT)
 
 
INSERT INTO test VALUES(1,'English',22.2);
 
INSERT INTO test VALUES(2,'Math',78.9);
 
INSERT INTO test VALUES(3,'History',77.9);
Nach dem Login kopieren

1. Legen Sie den Datentreiber mysql-connector-java-5.0.3-bin.jar in die Bibliothek im Tomcat-Verzeichnis ab

2. Ändern Sie die context.xml-Datei unter Tomcats Konfiguration und fügen Sie Unterstützung für die Ressourcenkonfiguration hinzu

<Resource auth="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"
/>
Nach dem Login kopieren

1)Name: Geben Sie den JNDI-Namen an die Ressource.

2) auth: Gibt den Manager an, der die Ressource verwaltet. Es gibt zwei optionale Werte: Container und Anwendung. Container bedeutet, dass die Ressource vom Container erstellt und verwaltet wird, und Anwendung bedeutet, dass die Ressource von der Webanwendung erstellt und verwaltet wird.

3) Typ: Geben Sie den Java-Klassennamen der Ressource an.

4) Benutzername: Geben Sie den Benutzernamen an, um eine Verbindung zur Datenbank herzustellen.

5) Passwort: Geben Sie das Passwort für die Verbindung zur Datenbank an.

6) DriverClassName: Geben Sie den Namen der Treiberimplementierungsklasse im JDBC-Treiber an, der eine Verbindung zur Datenbank herstellt.

7)URL: Geben Sie die URL für die Verbindung zur Datenbank an. 127.0.0.1 ist die IP des Datenbankservers, mit dem eine Verbindung hergestellt werden soll, 3306 ist der Datenbankserver-Port und BookDB ist der Datenbankname.

8) maxActive: Gibt die maximale Anzahl aktiver Datenbankverbindungen im Datenbankverbindungspool an. Der Wert ist 0, was bedeutet, dass es keine Begrenzung gibt.

9)maxIdle: Gibt die maximale Anzahl inaktiver Datenbankverbindungen im Datenbankverbindungspool an. Der Wert ist 0, was bedeutet, dass es keine Begrenzung gibt.

10) maxWait: Geben Sie die maximale Zeit (in Millisekunden) an, die die Datenbankverbindung im Datenbankverbindungspool inaktiv sein soll. Wenn diese Zeit überschritten wird, wird eine Ausnahme ausgelöst. Der Wert ist -1, was bedeutet, dass Sie unbegrenzt warten können.

maxActive="100"

gibt die maximale Anzahl von Verbindungen an, die unter gleichzeitigen Bedingungen aus dem Verbindungspool abgerufen werden können. Wenn die Datenbank nicht separat ist und von einer Anwendung verwendet wird, kann das Festlegen des Parameters maxActive verhindern, dass eine Anwendung unbegrenzte Verbindungen erhält und sich auf andere Anwendungen auswirkt. Wenn eine Datenbank nur zur Unterstützung einer Anwendung verwendet wird, kann maxActive theoretisch auf einen Wert festgelegt werden, der dies nicht zulässt Die Datenbank kann die maximale Anzahl von Verbindungen unterstützen. maxActive stellt lediglich die maximale Anzahl von Verbindungen dar, die gleichzeitig über den Verbindungspool abgerufen werden können. Der Erwerb und die Freigabe von Verbindungen erfolgen in beide Richtungen. Wenn die Anwendung gleichzeitig den Verbindungspool anfordert, muss der Verbindungspool die Verbindung von der Datenbank abrufen. Wenn die Anwendung die Verbindung beendet, gibt sie die Verbindung an den Verbindungspool zurück. Wird der Verbindungspool gleichzeitig auch die Verbindung zurückgeben? Was ist mit der Datenbank? Die Antwort lautet offensichtlich: Nein. In diesem Fall wird der Verbindungspool nicht nur nicht verbessert, sondern auch die Leistung verringert. Wie soll mit dem Verbindungspool umgegangen werden?

maxIdle="30"

Wenn maxActive=100 während der Parallelität erreicht wird, muss der Verbindungspool 100 Verbindungen aus der Datenbank für die Anwendungsnutzung erhalten, und wenn die Anwendung die Verbindung schließt, muss schließlich Da maxIdle=30, werden nicht alle Verbindungen an die Datenbank zurückgegeben. Es bleiben 30 Verbindungen im Verbindungspool und der Status ist inaktiv.

minIdle="2"

Minimum wird standardmäßig nicht wirksam. Dies bedeutet, dass der Systemüberwachungsthread die Zusatzfunktion startet, wenn im Verbindungspool nur wenige Verbindungen vorhanden sind. Unter normalen Umständen starten wir keine Zusatzthreads.

Frage: Wie stelle ich maxActive und maxIdle ein?

Theoretisch sollte maxActive auf die maximale Anzahl von Parallelitäten der Anwendung eingestellt werden. Auf diese Weise kann die Anwendung auch bei maximaler Parallelität immer noch Verbindungen aus dem Verbindungspool erhalten, aber die Schwierigkeit besteht darin, dass dies schwierig ist Damit wir genau sein können, schätzen wir die maximale Anzahl von Parallelitäten. Die Festlegung auf die maximale Anzahl von Parallelitäten ist eine Garantie für die optimale Servicequalität.

maxIdle对应的连接,实际上是连接池保持的长连接,这也是连接池发挥优势的部分,理论上讲保持较多的长连接,在应用请求时可以更快的响应,但是过多的连接保持,反而会消耗数据库大量的资源,因此maxIdle也并不是越大越好,同上例我们建议将 maxIdle设置成50-100中靠近50的数字,例如55。这样就能在兼顾最大并发同时,保持较少的数据库连接,而且在绝大多情况,能够为应用程序提供最快的相应速度。

3.打开应用程序的 Web.xml文件,添加以下配置

<resource-ref>
 
<description>DB Connection</description>
 
<res-ref-name>jdbc/ewsdb</res-ref-name>
 
<res-type>javax.sql.DataSource</res-type>
 
<res-auth>Container</res-auth>
 
</resource-ref>
Nach dem Login kopieren

属性说明:

1)description:对所引用的资源的说明。

2)res-ref-name:指定所引用资源的JNDI名字,与元素中的name属性对应。

3)res-type:指定所引用资源的类名,与元素中的type属性对应。

4)res-auth:指定管理所引用资源的Manager,与元素中的auth属性对应

4. 编写使用java代码,并放在tomcat环境下使用,如下

创建JSP范例:MyJsp.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<html>
<head>
<title>Tomcat下JNDI数据库连接池</title>
</head>
<body>
 <%
 try{
 Connection conn;
 Statement stmt;
 ResultSet rs;
 Context ctx = new InitialContext();
 DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/ewsdb");
 conn = ds.getConnection();
 stmt = conn.createStatement();
 //查询记录
 rs = stmt.executeQuery("select ID,NAME,PRICE from test");
 //输出查询结果
 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);
  //打印显示的数据
  out.println("<tr><td>"+col1+"</td><td>"+col2+"</td><td>"+col3+"</td></tr>");}
  out.println("</table>");
 
 //关闭结果集、SQL声明和数据库连接
 rs.close();
 stmt.close();
 conn.close();
 }catch(Exception e){
 out.println(e.getMessage());
 e.printStackTrace();
 }
 %>
</body>
</html>
Nach dem Login kopieren

 在浏览器中输入http://localhost:8080/test/MyJsp.jsp,即可查看结果

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多Java 数据库连接池详解及简单实例相关文章请关注PHP中文网!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage