Spring BootのDBをH2からMySQLへ変更したら、起動時に「Loading class `com.mysql.jdbc.Driver'. This is deprecated. 〜」というエラーログが出たので、その時の解決方法に書いています。
※ 本ページはプロモーションが含まれています。
Spring Bootのウェブアプリ(Webサイト)で使用していたDB(データベース)をH2からMySQLヘ切り替えたら、Spring Bootアプリ起動時に開発環境Eclipseのコンソールログに赤いエラーログが出力されるようになりました。
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
本記事では、このエラーを解決するために試した事を書いています。
◾️動作環境とバージョン情報です
OS:macOS Big Sur(バージョン11.7.2)
Spring Bootバージョン:2.7.6
Java:11
MySQL:MySQL Community Edition 8.0.31
開発環境:Eclipse(Pleiades All in One、4.16(2020-06)、Java Full Edition版)
まず、DBをH2からMySQLヘ変更したので、Spring BootアプリのMySQLへの接続設定についてです。
Mavenのpom.xmlファイルに、MySQLドライバのdependencyタグを追加しました。
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
あと、プロパティファイル(application.properties)のMySQLへの接続設定です。
(*DB名、ユーザ名、パスワードは各自の環境で置き換えてください。ここではローカル環境のMySQLにhogedbという名前のDBを作り、そのhogedbに接続するように設定しています。)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/hogedb
spring.datasource.username=root
spring.datasource.password=password
設定例の接続ユーザ(spring.datasource.username)をrootにしていますが、あくまで設定例です。rootユーザは当然使わない方が良いです。(特に本番環境のウェブアプリならrootを使わない方がいいです。Spring Bootアプリ用のMySQLユーザを作成して使うのが良いと思います。)
Spring Bootアプリ用のMySQLユーザを作成するSQL(create userとか)については別ページで説明していますので、良ければそちらも参考にしてください。
MySQL上でSpring Bootで使用するDB、テーブル、ユーザを作成する - DBをMySQLに変更する【Spring Boot2で日記ウェブアプリ】
これでMySQLへの接続設定ができたのでSpring Bootアプリを起動してみたら、起動時に冒頭でも説明したエラーメッセージがEclipseのコンソールログに出力されました。
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
このエラーメッセージをDeepLで翻訳するとこんな感じです。
「クラス `com.mysql.jdbc.Driver' をロードしています。これは非推奨です。新しいドライバクラスは `com.mysql.cj.jdbc.Driver' である。このドライバはSPI経由で自動的に登録されるので、ドライバクラスを手動でロードする必要は通常ない。」
あと、赤い文字でエラーメッセージぽいけど、Spring Bootアプリ自体は起動するしMySQLとも連携できていたので、エラーではないのかもしれないです。とはいえこのエラーっぽいメッセージが出力される状態は気になって放置できない。。
そして、このエラーメッセージをネットで調べてみたら、application.propertiesファイルのspring.datasource.driver-class-nameの部分を以下のように修正すればエラーは消えるという情報が結構ありました。
■修正前
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
■修正後
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
けど私の環境では最初から"com.mysql.cj.jdbc.Driver"を指定しているので、これでは解決できませんでした。
この後も自分で色々と試したのですが、pom.xmlに設定していたLog4jdbc-log4j2ライブラリを削除したら、問題のエラーメッセージは出なくなり解決しました。
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
(*Log4jdbc-log4j2ライブラリは、H2を使用していた時にSQLログを出力するために使用していたライブラリです。)
この問題を解決するのに結構時間がかかりました、やれやれ。
あと、MySQLに変更してEclipseのコンソール上にSQLログを出力したい場合、application.propertiesファイルにspring.jpa.show-sqlプロパティを追加すればできました。
spring.jpa.show-sql=true
やっぱりSQLロギングは、Javaプログラミング開発時に便利です。便利というか必須ですね。