Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Quando Class.forName é necessário ao se conectar a um banco de dados via JDBC em um aplicativo da web?


Os drivers JDBC4 incluem um arquivo:

META-INF/services/java.sql.Driver

no jar que usa o mecanismo ServiceProvider para registrar a implementação do Driver com a JVM (consulte javadocs para java.util.ServiceLoader ). É por isso que Class.forName não é mais necessário.

Meu palpite é que este é um problema do carregador de classes. O ServiceLoader javadoc menciona que:

Eu tentaria colocar seu driver no tomcat\lib diretório em vez do diretório do seu aplicativo da Web para ver se isso faz diferença (carregador de classes diferente?).

Se você iniciar seu aplicativo da Web por meio de um IDE e definir um ponto de interrupção, quando atingir o ponto de interrupção, poderá usar o recurso "evaluate expression" para executar:ServiceLoader.load(Driver.class) . Isso lhe dará um ServiceLoader classe que você pode espiar para ver quais Drivers estão registrados. Você pode verificar se o driver mysql está lá, onde está na lista, etc, o que pode ajudar a descobrir o comportamento aqui.