Los controladores JDBC4 incluyen un archivo:
META-INF/services/java.sql.Driver
en el jar que utiliza el mecanismo ServiceProvider para registrar la implementación del controlador con la JVM (consulte javadocs para java.util.ServiceLoader
). Por eso Class.forName
ya no es necesario.
Mi conjetura es que este es un problema del cargador de clases. El ServiceLoader
javadoc menciona que:
Intentaría poner su controlador en tomcat\lib
directorio en lugar del directorio de su aplicación web para ver si eso marca la diferencia (¿cargador de clases diferente?).
Si inicia su aplicación web a través de un ide y establece un punto de interrupción, una vez que llegue al punto de interrupción, puede usar la función "evaluar expresión" para ejecutar:ServiceLoader.load(Driver.class)
. Esto le dará un ServiceLoader
clase en la que puede echar un vistazo para ver qué controladores están registrados. Puede verificar si el controlador mysql está allí, en qué parte de la lista está, etc., lo que podría ayudar a descubrir el comportamiento aquí.