JDBC4-drivrutiner inkluderar en fil:
META-INF/services/java.sql.Driver
i burken som använder ServiceProvider-mekanismen för att registrera drivrutinsimplementeringen med JVM (se javadocs för java.util.ServiceLoader
). Det är därför Class.forName
är inte längre nödvändigt.
Min gissning är att detta är ett problem med klassladdning. ServiceLoader
javadoc nämner att:
Jag skulle försöka lägga in din drivrutin i tomcat\lib
katalog snarare än din webbappskatalog för att se om det gör någon skillnad (annan klass laddare?).
Om du startar din webbapp via en ide och ställer in en brytpunkt, när du har nått brytpunkten, kan du använda funktionen "evaluate expression" för att köra:ServiceLoader.load(Driver.class)
. Detta ger dig en ServiceLoader
klass som du kan kika in i för att se vilka förare som är registrerade. Du kan kontrollera om mysql-drivrutinen finns där, var i listan den finns, etc, vilket kan hjälpa dig att ta reda på beteendet här.