Требуется ли регистрация драйвера с помощью Class.forName () в mysql-connector 8.0? - PullRequest
0 голосов
/ 20 мая 2018

Я уже знаю по JDBC 4.0. и JDK 6 , драйверы, найденные в classpath, загружаются автоматически.По этой причине мы привыкли игнорировать эту строку кода Class.forName(dbDriver); при создании соединения JDBC.

Но недавно я установил MySQL Server 8.0.11 и обновил драйвер до mysql-connector-java:8.0.11 в моем простом проекте сервлета, который работает на tomcat 8.5.30 .Но это дает мне печально известное исключение

java.sql.SQLException: No suitable driver found for 
jdbc:mysql://localhost:3306/mysql at ...

Но раньше весь мой код работал и работал хорошо.Затем я добавил Class.forName("com.mysql.jdbc.Driver");

И это работает.Я думаю, что я ничего не пропустил.Может кто-нибудь объяснить мне, в чем может быть причина?

1 Ответ

0 голосов
/ 20 мая 2018

Автоматическая загрузка драйвера JDBC 4.0 (и выше) работает только в том случае, если jar драйвера находится на начальном (системном) пути класса приложения.Если вы используете Tomcat, драйвер должен находиться в папке <catalina-home>/lib.

Если вы развертываете драйвер вместе с вашим приложением, то драйвер находится в приложении контекста этого конкретного приложения, и оннужно будет явно загружать, используя Class.forName.

Но на практике вам не следует использовать DriverManager.getConnection для создания соединений в веб-приложении.Вы должны использовать источник данных (предпочтительно с пулом соединений), созданный и инициализированный в коде, или в контексте или конфигурации сервера Tomcat.В этом случае эта проблема даже не возникнет, потому что либо источник данных уже знает, как получить драйвер, либо вам необходимо явно настроить его для использования драйвером в любом случае.

...