sobre la explicación detallada del problema del grupo de conexiones entre Tomcat y MySQL (original)
y finalmente obtuve algo, espero que sea útil para todos. En primer lugar, tenga en cuenta: aquí analizamos específicamente los problemas encontrados en la versión Tomcat 5.5. Por qué esta versión es particularmente específica, lo explicaré en un momento.
Pregunta 1: No se puede crear un controlador JDBC de clase '' para la URL de conexión 'nula'
respuesta:
[Análisis de causa]
Muchos amigos descubrieron que el error anterior se produjo al llamar al grupo de conexiones después de configurar $Tomcat/conf/server.xml, $Tomcat/conf/context.xml o incluso WEB-INF/web.xml. Al analizar la causa del error, generalmente se debe a que no hemos vinculado la fuente de datos (la causa real del error es porque las configuraciones de driverClassName y URL están vacías, pero definitivamente no nos olvidaremos de configurar este lugar, por lo que debemos haber completado los ajustes sin conectarse!). Generalmente hay dos formas de configurar la fuente de datos (no solo el método de configuración en $Tomcat/conf/context.xml). Una es agregar el siguiente código antes de </GlobalNamingResources> en $Tomcat/conf/server.xml:
Método de configuración uno:
<Recurso
name="jdbc/test" //Nombre de la fuente de datos
tipo="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver" //Esta es la configuración de driverClassName que acabo de mencionar
contraseña="admin" //Contraseña de la base de datos
maxIdle="2"
maxEspera="5000"
nombre de usuario = "raíz" // nombre de usuario de la base de datos
url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //URL de la base de datos, que es la URL que se acaba de mencionar
maxActive="4"/>
Excepto cuando hay comentarios, todos los parámetros se utilizan para establecer el número de conexiones, el estado de inactividad y el estado de actividad. Si solo está realizando un experimento de aprendizaje, no necesita cambiarlo. El efecto de este método es equivalente a configurar operaciones en la interfaz gráfica de Tomcat.
Otra forma es agregar el siguiente código a <Context ...></Context> en $Tomcat/conf/server.xml:
Método de configuración dos:
<Nombre del recurso="jdbc/test" auth="Contenedor" tipo="javax.sql.DataSource"/>
<ResourceParams nombre="jdbc/test">
<parámetro>
<nombre>fábrica</nombre>
<valor>org.apache.commons.dbcp.BasicDataSourceFactory</valor>
</parámetro>
<parámetro>
<nombre>nombre de usuario</nombre>
<valor>raíz</valor>
</parámetro>
<parámetro>
<nombre>contraseña</nombre>
<valor>administrador</valor>
</parámetro>
<parámetro>
<nombre>nombre de clase del conductor</nombre>
<valor>com.mysql.jdbc.Driver</valor>
</parámetro>
<parámetro>
<nombre>url</nombre>
<valor>jdbc:mysql://localhost:3306/test?autoReconnect=true</valor>
</parámetro>
<parámetro>
<nombre>tamaño inicial</nombre>
<valor>20</valor>
</parámetro>
<parámetro>
<nombre>maxActive</nombre>
<valor>30</valor>
</parámetro>
<parámetro>
<nombre>maxWait</nombre>
<valor>10000</valor>
</parámetro>
</ResourceParams>
El propósito habitual de esta configuración es permitir que la fuente de datos se implemente en un directorio de mapeo separado, es decir, generalmente este código aparece en <Context docBase="directorio específico (como D:webappsmyjsp) "path= "Nombre de acceso (como /myjsp)" reloadable="true"></Context>, para que pueda acceder a un archivo en D:webappsmyjsp accediendo a http://localhost:8080/myjsp/ XXX.jsp La página jsp luego recupera la fuente de datos o realiza otras operaciones para recuperar la fuente de datos.
El problema es que, no importa qué método, ¡nadie está conectado! Si no utiliza ResourceLink, el bean o el bean no podrán encontrar el código que configuró. ¿Cómo puede encontrar el nombre de clase del controlador y la URL? De hecho, ¡no se encontrará ninguna configuración de parámetros!
[Solución]
Una vez que sepas el motivo, la solución será más sencilla. No importa qué método utilices.
Solución uno:
Si desea implementar ResourceLink en un directorio de asignación, agregue <ResourceLink global="nombre de la fuente de datos" name="nombre asignado" tipo="javax.sql.DataSource" en medio de <Context...></Context> "/>, tenga en cuenta que si no comprende la relación del código, debe escribirlo de cerca después de <Contexto...>.
Solución dos:
Si desea hacerlo global y utilizable en todos los directorios de mapeo, simplemente escríbalo en $Tomcat/conf/context.xml y todo estará bien.
Generalmente, todos configuran el "nombre de la fuente de datos" y el "nombre asignado" para que sean iguales. Por ejemplo, yo lo configuro así: <ResourceLink global="jdbc/test" name="jdbc/test" type="javax. sql.DataSource" "/>.
Además, debe tenerse en cuenta que en Tomcat5.5, si configura el segundo método anterior, incluso si agrega ResourceLink, encontrará el problema de que no se ejecutará correctamente.
Pregunta 2: javax.naming.NameNotFoundException: el nombre XXX no está vinculado en este contexto
respuesta:
[Análisis de causa]
En Tomcat5.5, configurar la fuente de datos en <Contexto...><Contexto> no funciona correctamente. He leído una publicación escrita por un extranjero. Mi nivel de inglés no es alto, pero puedo entenderlo. Dijo que esto se debe a que en versiones superiores (deberían ser Tomcat y dbcp), el valor de fábrica se cambió de org.apache.commons.dbcp.BasicDataSourceFactory a org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory. Pero lo intenté y no resolvió el problema. Y descubrí que la versión estándar de Tomcat5.5 viene con dbcp, que está en $Tomcatcommonlib. Leí la explicación de otro internauta y dijo que el segundo método de configuración no es posible. Esto muestra que el segundo método de configuración solo es aplicable a versiones anteriores. No sé qué parte realizar cambios en la versión actual, pero el motivo del error es que quiero configurarlo juntos y el servidor no puede encontrarlo. la fuente de datos correspondiente al "nombre de la fuente de datos".
[Solución]
Puede solucionarlo si conoce el motivo. Parece que solo funciona si la fuente de datos está declarada en <GlobalNamingResources>. Entonces todos pueden configurar Tomcat5.5 de acuerdo con el primer método de configuración (es por eso que hablo de Tomcat5.5 en particular).
Pregunta 3: No se puede cargar la clase de controlador JDBC 'com.mysql.jdbc.Driver'
respuesta:
[Análisis de causa]
No solo para mysql, sino también para otras bases de datos, siempre que no se pueda encontrar, se generará el error "No se puede cargar la clase de controlador JDBC". Entonces, ¿por qué no se puede encontrar la clase de controlador de base de datos? ¿Cómo encontrarlo? En realidad es muy simple.
[Solución]
Simplemente copie jdbc a $Tomcatcommonlib.
Pregunta 4: No se puede establecer conexión, el grupo está agotado
[Análisis de causa]
Es muy simple. La conexión no se puede establecer y el grupo de conexiones se desborda. Esto significa que los recursos de su conexión se desperdician porque no los recicló a tiempo.
[Solución]
Utilice el método close() de forma rápida y correcta para liberar ResultSet, Statement y Connection. No entraré en las declaraciones específicas. Se recomienda escribirlas finalmente.
Resumen: Entonces, si desea utilizar Tomcat5.5 para establecer un grupo de conexiones de fuente de datos, solo hay tres pasos.
Primero: configure la fuente de datos. Se recomienda utilizar la interfaz gráfica de operación. Si lo hace manualmente, agregue el siguiente código antes de </GlobalNamingResources> en $Tomcat/conf/server.xml:
<Resource.
name="jdbc/test" //Nombre de la fuente de datos
tipo="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver" //Esta es la configuración de driverClassName que acabo de mencionar
contraseña="admin" //Contraseña de la base de datos
maxIdle="2"
maxEspera="5000"
nombre de usuario = "raíz" // nombre de usuario de la base de datos
url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //URL de la base de datos, que es la URL que se acaba de mencionar
maxActive="4"/>
por los suyos propios.
Segundo: configurar la conexión de recursos. Se recomienda escribir <ResourceLink global="nombre de fuente de datos" nombre="nombre asignado" tipo="javax.sql.DataSource"/> en $Tomcat/conf/context.xml si desea asignarlo en un archivo separado. La implementación del directorio se escribe después de <Context...> en el directorio que debe asignarse en $Tomcat/conf/server.xml.
Tercero: copie JDBC a $ Tomcat common lib.
Además, no explicaré en detalle cómo llamar a la fuente de datos aquí. Este problema es relativamente simple, pero tenga en cuenta que DataSource ds=(DataSource)envCtx.lookup(" Fuente de datos de referencia "); La "fuente de datos referenciada" en la declaración es solo el "nombre asignado", no el "nombre de la fuente de datos", por lo que le sugiero que configure los dos nombres para que sean iguales por conveniencia. ¡Y preste especial atención a liberar los recursos inactivos a tiempo; de lo contrario, el grupo de conexiones se desbordará!
Los anteriores son algunos resultados de mi investigación actual. Todavía soy un principiante. Espero que este artículo sea útil para todos. Si tiene alguna pregunta, comuníquese conmigo. Mi correo electrónico es: [email protected] (personas a las que les encanta ver luces de neón). ¡Este artículo es original de neonlight.bokee.com (CSDN_MathMagician) y no se puede reproducir! 11 de agosto de 2006
http://blog.csdn.net/mathmagician/archive/2007/03/01/1518689.aspx