JDBC4-Treiber enthalten eine Datei:
META-INF/services/java.sql.Driver
in der JAR-Datei, die den ServiceProvider-Mechanismus verwendet, um die Treiberimplementierung bei der JVM zu registrieren (siehe Javadocs für java.util.ServiceLoader
). Deshalb Class.forName
ist nicht mehr erforderlich.
Meine Vermutung ist, dass dies ein Problem mit dem Klassenlader ist. Der ServiceLoader
javadoc erwähnt das:
Ich würde versuchen, Ihren Treiber in die tomcat\lib
einzufügen Verzeichnis statt Ihres Web-App-Verzeichnisses, um zu sehen, ob das einen Unterschied macht (anderer Klassenlader?).
Wenn Sie Ihre Web-App über eine IDE starten und einen Haltepunkt festlegen, können Sie nach dem Erreichen des Haltepunkts die Funktion "Ausdruck auswerten" verwenden, um Folgendes auszuführen:ServiceLoader.load(Driver.class)
. Dadurch erhalten Sie einen ServiceLoader
Klasse, in der Sie einen Blick darauf werfen können, welche Fahrer registriert sind. Sie können überprüfen, ob der mysql-Treiber vorhanden ist, wo er sich in der Liste befindet usw., was beim Ermitteln des Verhaltens hier hilfreich sein könnte.