Explicación detallada del grupo de conexión de base de datos Java
El principio de agrupación de conexión de base de datos es:
La idea básica de la agrupación de la conexión es almacenar la conexión de la base de datos como un objeto en la memoria cuando se inicializa el sistema. Cuando el usuario necesita acceder a la base de datos, en lugar de establecer una nueva conexión, se saca un objeto de conexión gratuita establecido desde el grupo de conexión. Después de su uso, el usuario no cierre la conexión, pero vuelve a colocar la conexión en el grupo de conexión para acceder a la siguiente solicitud. El establecimiento y la desconexión de las conexiones son administrados por el grupo de conexión en sí. Al mismo tiempo, también puede controlar el número inicial de conexiones en el grupo de conexión, los límites superiores e inferiores de las conexiones, el número máximo de tiempos de uso para cada conexión, el tiempo de inactividad máximo, etc. al establecer los parámetros del grupo de conexión. También puede monitorear el número de conexiones de bases de datos, uso, etc. a través de su propio mecanismo de gestión.
Piscinas de conexión de base de datos comúnmente utilizadas:
Los grupos de conexión de base de datos comúnmente utilizados incluyen JNDI, C3P0, Yakarta de Apache y DBCPBONECP. Entre ellos, terceros que dependen del marco Sing usan C3P0 y DBCP; y se dice que Bonecp es el grupo de conexión de base de datos más rápido. La fuente de datos creada por el método JNDI realmente implementa javax.sql.dataSource (ninguno de los otros tres métodos)
Ahora presentaremos principalmente cómo usar el método JNDI. Este método es implementado por un servidor web (por ejemplo: Tomcat, Weblogic, WebSphere, Tomcat) para implementar java.sql.dataSource. El servidor web es responsable de inicializar la fuente de datos, crear conexiones, asignar y administrar conexiones. Dado que es una función implementada por un servidor web en sí, no es necesario introducir paquetes JAR especiales en el proyecto, pero es necesario agregar configuraciones relevantes a algunos archivos de configuración del servidor. A continuación, tome el servidor TomCat (la base de datos es MySQL) como un ejemplo para describir el uso de este método.
Creación e inicialización de la base de datos:
Crear prueba de tabla (ID int primario clave, nombre Varchar (10), Price Float) Inserte en valores de prueba (1, 'English', 22.2); inserte en valores de prueba (2, 'Matemáticas', 78.9); inserte en valores de prueba (3, 'Historial', 77.9);
1. Coloque el controlador de datos MySQL-Connector-Java-5.0.3-Bin.jar en la lib en el directorio Tomcat
2. Modifique el archivo context.xml en el conf y agregue soporte para la configuración de recursos
<Resource Auth = "Container" DriverClassName = "com.mysql.jdbc.driver" maxactive = "100" maxidle = "30" maxwait = "10000" name = "jdbc/ewsdb" username = "root" contraseña = "admin" type = "javax.sql.dataSource" "" url = "jdbc: mysql: // localhost: 3306/test1"/>
<Descripción del atributo de recursos>
1) Nombre: Especifique el nombre JNDI del recurso.
2) Auth: Especifica el administrador que administra el recurso, que tiene dos valores opcionales: contenedor y aplicación. Container significa que el contenedor crea y administra el recurso, y la aplicación significa que la aplicación web crea y administra el recurso.
3) Tipo: Especifique el nombre de clase Java del recurso.
4) Nombre de usuario: especifique el nombre de usuario para conectarse a la base de datos.
5) Contraseña: especifique la contraseña para conectarse a la base de datos.
6) DriverClassName: especifica el nombre de la clase de implementación del controlador en la unidad JDBC que se conecta a la base de datos.
7) URL: especifique la URL para conectarse a la base de datos. 127.0.0.1 es la IP del servidor de la base de datos a la que se conectará, 3306 es el puerto del servidor de la base de datos y BookDB es el nombre de la base de datos.
8) Maxactive: Especifica el número máximo de conexiones de base de datos activas en el grupo de conexión de la base de datos. El valor es 0, lo que indica que no está restringido.
9) Maxidle: Especifica el número máximo de conexiones de bases de datos en el grupo de conexión de la base de datos que están inactivas. El valor es 0, lo que indica que no está restringido.
10) MaxWait: especifica el tiempo máximo (en milisegundos) para que el grupo de conexión de la base de datos esté inactivo. Después de este tiempo, se lanzará una excepción. El valor es -1, lo que significa que puedes esperar indefinidamente.
maxactive = "100"
Indica el número máximo de conexiones que se pueden obtener del grupo de conexión en concurrencia. Si la base de datos no se usa sola para una aplicación, configurar el parámetro Maxactive puede evitar que una aplicación obtenga conexiones ilimitadas de otras aplicaciones. Si una base de datos solo se usa para admitir una aplicación, MaxActive se puede establecer teóricamente en el número máximo de conexiones que la base de datos puede admitir. Maxactive simplemente representa el número máximo de conexiones que se pueden obtener simultáneamente a través del grupo de conexión. La adquisición y el lanzamiento de las conexiones son de dos vías. Cuando la aplicación solicita simultáneamente el grupo de conexión, el grupo de conexión debe obtener la conexión de la base de datos. Entonces, cuando la aplicación usa la conexión y devuelve la conexión al grupo de conexión, ¿el grupo de conexión también devuelve la conexión a la base de datos al mismo tiempo? Obviamente la respuesta es no. Si eso sucede, el grupo de conexión se volverá innecesario, lo que no solo no mejorará el rendimiento, sino que reducirá el rendimiento. Entonces, ¿cómo lidiar con la conexión después de que se devuelve?
maxidle = "30"
Si se alcanza maxactive = 100 durante la concurrencia, el grupo de conexión debe obtener 100 conexiones de la base de datos para proporcionar la aplicación para su uso. Cuando la aplicación cierra la conexión, ya que Maxidle = 30, no todas las conexiones se devolverán a la base de datos. 30 conexiones se mantendrán en el grupo de conexión y el estado está inactivo.
minidle = "2"
El mínimo no entra en vigencia por defecto. Su significado es que cuando hay pocas minidles en el grupo de conexión, el hilo de monitoreo del sistema iniciará la función complementaria. En general, no comenzamos el hilo complementario.
Pregunta: ¿Cómo establecer Maxactive y Maxidle?
En teoría, Maxactive debe establecerse en el número máximo de concurrencia de aplicaciones, de modo que incluso en el caso de la concurrencia máxima, la aplicación aún puede obtener conexiones del grupo de conexión. Sin embargo, la dificultad es que es difícil para nosotros estimar con precisión el número máximo de concurrencia. Configurarlo en el número de concurrencia máximo es un garantía óptima de calidad de servicio.
Las conexiones correspondientes de Maxidle son en realidad largas conexiones mantenidas por el grupo de conexión, que también es la parte en la que el grupo de conexión prenta. En teoría, mantener conexiones más largas puede responder más rápido al aplicar solicitudes, pero mantener demasiadas conexiones consumirá una gran cantidad de recursos en la base de datos. Por lo tanto, cuanto más grande es el maxidle, mejor. En el mismo ejemplo que el anterior, recomendamos establecer Maxidle en un número cercano a 50 en 50-100, como 55. Esto le permite mantener menos conexiones de bases de datos mientras tiene en cuenta la concurrencia máxima y, en la mayoría de los casos, puede proporcionar la aplicación la velocidad más rápida correspondiente.
3. Abra el archivo web.xml de la aplicación y agregue la siguiente configuración
<contrato-Ref> <Scuidtion> DB Connection </cription> <S resef-name> jdbc/ewsdb </res-ref-name> <res-type> javax.sql.datasource </ res-type> <res-auth> contenedor </auth> </ recurso recursos-
<Scero-Ref> Descripción del atributo:
1) Descripción: Una explicación del recurso referenciado.
2) RES-REF-NAME: Especifica el nombre JNDI del recurso referenciado, correspondiente al atributo de nombre en el elemento <consurce>.
3) RES-TYPE: Especifica el nombre de clase del recurso referenciado, correspondiente al atributo de tipo en el elemento <consurce>.
4) RES-AUTH: Especifique el administrador que administra los recursos referenciados, correspondientes al atributo de autenticación en el elemento <consurce>
4. Escriba el código Java y póngalo en el entorno Tomcat, como sigue
Crear ejemplo de JSP: myjsp.jsp
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" PageEncoding = "UTF-8"%> <! DocType html public "-// w3c // dtd html 4.01 transición // en" "http://www.w3.org/tr/html4/loos Página import = "java.io.*" %> < %@ page import = "java.util.*" %> < %@ page import = "java.sql.*" %> < %@ page import = "java.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.sql.*" " %@ página@ page@ page@ page@ page@ page@ page@ page@ page@ page@ page@ page@ page import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.naming.*" %> <html> <fove> <title> Jndi Conexión de la base de la base de la base bajo Tomcat </title> </head> <sod <%> Declaración stmt; ResultSet RS; Contexto ctx = new InitialContext (); DataSource ds = (dataSource) ctx.lookup ("java: comp/env/jdbc/ewsdb"); conn = ds.getConnection (); stmt = conn.createStatement (); // Registros de consulta rs = stmt.executeQuery ("Seleccionar ID, nombre, precio de la prueba"); // Resultado de la consulta de salida. while (rs.next ()) {string col1 = rs.getString (1); Cadena col2 = rs.getString (2); flotante col3 = rs.getfloat (3); // Imprima los datos mostrados out.println ("<tr> <td>"+col1+"</td> <td>"+col2+"</td> <td>"+col3+"</td> </tr>");} out.println ("</table>"); // cierre el conjunto de resultados, declaración SQL y conexión de base de datos rs.close (); stmt.close (); conn.close (); } catch (excepción e) {out.println (e.getMessage ()); E.PrintStackTrace (); } %> </body> </html>Ingrese http: // localhost: 8080/test/myjsp.jsp en su navegador para ver los resultados
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!