Explication détaillée du pool de connexions de la base de données Java
Le principe de la mise en commun de la connexion de la base de données est:
L'idée de base de la mise en commun des connexions est de stocker la connexion de la base de données en tant qu'objet en mémoire lorsque le système est initialisé. Lorsque l'utilisateur doit accéder à la base de données, au lieu d'établir une nouvelle connexion, un objet de connexion libre établi est retiré du pool de connexion. Après utilisation, l'utilisateur ne ferme pas la connexion, mais remet la connexion dans le pool de connexion pour accéder à la demande suivante. L'établissement et la déconnexion des connexions sont gérés par le pool de connexions lui-même. Dans le même temps, vous pouvez également contrôler le nombre initial de connexions dans le pool de connexions, les limites supérieures et inférieures des connexions, le nombre maximum de temps d'utilisation pour chaque connexion, le temps d'inactivité maximal, etc. En réglant les paramètres du pool de connexions. Il peut également surveiller le nombre de connexions de base de données, d'utilisation, etc. par le biais de son propre mécanisme de gestion.
Pools de connexion de base de données couramment utilisés:
Les pools de connexion de la base de données couramment utilisés incluent JNDI, C3P0, Jakarta d'Apache et DBCPbonECP. Parmi eux, des tiers s'appuyant sur le cadre de chant utilisent C3P0 et DBCP; Et BONECP serait le pool de connexions de base de données le plus rapide. Le DataSource créé par la méthode JNDI implémente vraiment Javax.sql.Datasource (aucune des trois autres méthodes)
Maintenant, nous présenterons principalement comment utiliser la méthode JNDI. Cette méthode est implémentée par un serveur Web (par exemple: Tomcat, WebLogic, WebSphere, Tomcat) pour implémenter Java.Sql.Datasource. Le serveur Web est responsable de l'initialisation de la source de données, de la création de connexions, de l'allocation et de la gestion des connexions. Puisqu'il s'agit d'une fonction implémentée par un serveur Web lui-même, il n'est pas nécessaire d'introduire des packages JAR spéciaux dans le projet, mais il est nécessaire d'ajouter des configurations pertinentes à certains fichiers de configuration du serveur. Ensuite, prenez le serveur Tomcat (la base de données est MySQL) comme exemple pour décrire l'utilisation de cette méthode.
Création et initialisation de la base de données:
Créer un test de table (id int touche primaire, nom varchar (10), prix Float) insérer dans les valeurs de test (1, «anglais», 22.2); insérer dans les valeurs de test (2, «mathématiques», 78.9); insérer dans les valeurs de test (3, «historique», 77.9);
1. Mettez le pilote de données MySQL-Connector-Java-5.0.3-Bin.jar dans la LIB dans le répertoire Tomcat
2. Modifiez le fichier context.xml sous Conf de Tomcat et ajoutez la prise en charge de la configuration des ressources
<Resource Auth = "Container" DriverClassName = "com.mysql.jdbc.driver" maxactive = "100" maxidle = "30" maxwait = "10000" name = "jdbc / ewsdb" username = "root" passway = "admin" type = "javax.sql.datasource" url = "jdbc: mysql: // localhost: 3306 / test1" />
<Description de l'attribut de ressource>
1) Nom: Spécifiez le nom JNDI de la ressource.
2) Auth: Spécifie le gestionnaire qui gère la ressource, qui a deux valeurs facultatives: conteneur et application. Le conteneur signifie que le conteneur crée et gère la ressource, et l'application signifie que l'application Web crée et gère la ressource.
3) Type: Spécifiez le nom de classe Java de la ressource.
4) Nom d'utilisateur: spécifiez le nom d'utilisateur pour se connecter à la base de données.
5) Mot de passe: spécifiez le mot de passe pour se connecter à la base de données.
6) DriverClassName: spécifie le nom de la classe d'implémentation du pilote dans le lecteur JDBC se connectant à la base de données.
7) URL: spécifiez l'URL pour se connecter à la base de données. 127.0.0.1 est l'IP du serveur de base de données à connecter, 3306 est le port de serveur de base de données, et BookDB est le nom de la base de données.
8) Maxactive: spécifie le nombre maximum de connexions de base de données actives dans le pool de connexions de la base de données. La valeur est 0, indiquant qu'elle n'est pas limitée.
9) Maxidle: spécifie le nombre maximum de connexions de base de données dans le pool de connexions de base de données qui sont inactives. La valeur est 0, indiquant qu'elle n'est pas limitée.
10) Maxwait: Spécifie le temps maximum (en millisecondes) pour que le pool de connexion de la base de données soit inactif. Après cette période, une exception sera lancée. La valeur est -1, ce qui signifie que vous pouvez attendre indéfiniment.
maxactive = "100"
Indique le nombre maximal de connexions qui peuvent être obtenues à partir du pool de connexions en concurrence. Si la base de données n'est pas utilisée seule pour une application, la définition du paramètre maxactif peut empêcher une application d'obtenir des connexions illimitées à partir d'autres applications. Si une base de données n'est utilisée que pour prendre en charge une application, Maxactive peut théoriquement être définie sur le nombre maximum de connexions que la base de données peut prendre en charge. Maxactive représente simplement le nombre maximal de connexions qui peuvent être obtenues simultanément via le pool de connexions. L'acquisition et la libération de connexions sont à double sens. Lorsque l'application demande simultanément le pool de connexions, le pool de connexion doit obtenir la connexion à partir de la base de données. Ainsi, lorsque l'application utilise la connexion et renvoie la connexion au pool de connexion, le pool de connexion renvoie-t-il également la connexion à la base de données en même temps? De toute évidence, la réponse est non. Si cela se produit, le pool de connexions deviendra inutile, ce qui n'améliorera pas seulement les performances, mais réduira plutôt les performances. Alors, comment gérer la connexion après son retour?
maxidle = "30"
Si maxactive = 100 est atteint pendant la concurrence, le pool de connexions doit obtenir 100 connexions à partir de la base de données pour fournir l'application pour une utilisation. Lorsque l'application ferme la connexion, puisque Maxidle = 30, toutes les connexions ne seront pas renvoyées à la base de données. 30 connexions seront conservées dans le pool de connexions et l'état est inactif.
minidle = ”2”
Le minimum ne prend pas effet par défaut. Sa signification est que lorsqu'il y a peu de minidles dans le pool de connexion, le thread de surveillance du système démarrera la fonction supplémentaire. Généralement, nous ne commençons pas le fil supplémentaire.
Question: Comment définir Maxactive et Maxidle?
En théorie, le maxactif doit être réglé sur le nombre maximal de concurrence d'applications, de sorte que même en cas de concurrence maximale, l'application peut toujours obtenir des connexions à partir du pool de connexions. Cependant, la difficulté est qu'il nous est difficile d'estimer avec précision le nombre de concurrence maximale. Le régler sur le numéro de concurrence maximum est une assurance de qualité de service optimale.
Les connexions correspondantes de Maxidle sont en fait des connexions longues maintenues par le pool de connexions, qui est également la partie où le pool de connexions joue ses avantages. En théorie, le maintien de connexions plus longues peut répondre plus rapidement lors de l'application de demandes, mais le maintien de trop de connexions consommera une grande quantité de ressources dans la base de données. Par conséquent, plus le maxidle est grand, mieux c'est. Dans le même exemple que ci-dessus, nous vous recommandons de définir Maxidle à un nombre près de 50 dans 50-100, tels que 55. Cela vous permet de maintenir moins de connexions de base de données tout en prenant en compte la concurrence maximale, et dans la plupart des cas, il peut fournir l'application avec la vitesse correspondante la plus rapide.
3. Ouvrez le fichier web.xml de l'application et ajoutez la configuration suivante
<Resource-Ref> <Description> DB Connection </ Description> <Res-Ref-Name> JDBC / EWSDB </ RES-REF-NAME> <Res-Type> Javax.Sql.Datasource </su-Type> <Res-Auth> Container </ Res-Uuth> </ Resource-Ref>
<Resource-Ref> Attribut Description:
1) Description: Une explication de la ressource référencée.
2) Res-Ref-Name: Spécifie le nom JNDI de la ressource référencée, correspondant à l'attribut de nom dans l'élément <Source>.
3) Res-Type: Spécifie le nom de classe de la ressource référencée, correspondant à l'attribut de type dans l'élément <Source>.
4) Res-Auth: Spécifiez le gestionnaire qui gère les ressources référencées, correspondant à l'attribut Auth dans l'élément <Resource>
4. Écrivez du code Java et mettez-le dans l'environnement Tomcat, comme suit
Créer un exemple de 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. Page import = "java.io. *"%> <% @ page import = "java.util. *"%> <% @ page import = "java.sql. *"%> <% @ page import = "java.sql. *"%> <% @ page import = "javax.sql. *"%> <% @ page import = "javax.sql. *" import = "javax.sql. *"%> <% @ page import = "javax.sql. *"%> <% @ page import = "javax.sql. *"%> <% @ page import = "javax.naming. *"%> <html> Déclaration stmt; ResultSet RS; Context ctx = new InitialContext (); DataSource ds = (dataSource) ctx.lookup ("java: comp / env / jdbc / ewsdb"); Conn = ds.getConnection (); STMT = Conn.CreateStatement (); // requête enregistre rs = stmt.ExecuteQuery ("SELECT ID, nom, prix du test"); // le résultat de la requête de sortie 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); // imprime les données affichées out.println ("<tr> <td>" + col1 + "</td> <td>" + Col2 + "</td> <td>" + col3 + "</td> </tr>");} out.println ("</ table>"); // Fermez l'ensemble de résultats, la déclaration SQL et la connexion de la base de données Rs.Close (); stmt.close (); conn.close (); } catch (exception e) {out.println (e.getMessage ()); e.printStackTrace (); }%> </ body> </html>Entrez http: // localhost: 8080 / test / myjsp.jsp dans votre navigateur pour afficher les résultats
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!