JDBC4ドライバーにはファイルが含まれています:
META-INF/services/java.sql.Driver
ServiceProviderメカニズムを使用してドライバー実装をJVMに登録するjar内( java.util.ServiceLoader
)。そのため、Class.forName
もはや必要ありません。
私の推測では、これはクラスローダーの問題です。 ServiceLoader
javadocは次のように述べています:
ドライバーをtomcat\lib
に入れてみます Webアプリディレクトリではなくディレクトリを使用して、違いが生じるかどうかを確認します(クラスローダーが異なりますか?)。
IDEを介してWebアプリを起動し、ブレークポイントを設定した場合、ブレークポイントに到達すると、「式の評価」機能を使用して次のコマンドを実行できます。ServiceLoader.load(Driver.class)
。これにより、ServiceLoader
が提供されます どのドライバーが登録されているかを確認できるクラス。 mysqlドライバーがそこにあるかどうか、リストのどこにあるかなどを確認できます。これは、ここでの動作を理解するのに役立つ可能性があります。