Spring Boot起動時にエラーが発生「APPLICATION FAILED TO START」

Spring Bootアプリ起動時に「Failed to configure a DataSource: 'url' attribute 〜」、「Reason: Failed to determine a suitable driver class」というエラーが発生して起動できなかったので、解決方法について説明しています。

※ 本ページはプロモーションが含まれています。

目的と動作環境

最終更新日:2023/6/15

EclipseでSpring Bootのプロジェクトを作成して、とりあえず確認のためにSpring Bootアプリを起動したら、Eclipseコンソール上にエラーメッセージが出力されて起動できませんでした。

2023-01-27 04:52:33.058  WARN 72839 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
〜
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-01-27 04:52:33.102 ERROR 72839 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

本記事では、このエラーを解決するために試した事、解決方法をまとめて書いています。

◾️動作環境とバージョン情報です
OS:macOS Big Sur(バージョン11.7.2)
Spring Bootバージョン:2.7.8
開発環境:Eclipse(Pleiades All in One、Java Full Edition版)

エラーの原因と解決方法

まず、EclipseでSpring Bootプロジェクトを作成した時、この6個の依存関係のライブラリを追加したら冒頭の起動時エラーが発生しました。

  • Spring Boot Devtools
  • Lombok
  • 検証
  • Spring Data JPA
  • Thymeleaf
  • Spring Web

そして、この中で「Spring Data JPA」ライブラリがあるとエラーが発生する事がわかりました。
なので、このライブラリを削除すればとりあえずはこの問題のエラーは消えます。
(pom.xmlファイルだと、このdependencyタグを削除する)

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

pom.xmlファイルを直接編集してもいいですが、他の方法でEclipse上のSpring Bootプロジェクトを右クリック->Spring->スターターの編集を選択すると、Springスタータープロジェクト依存関係画面が開いて、そこでライブラリを追加したり削除したりする事ができます。

ただ、Spring Data JPAライブラリを追加してSpring Bootプロジェクトを作成したという事は、Spring Bootアプリで何かDBを使う予定だと思うので、Spring Data JPAをライブラリから削除して解決して終わりとはならないと思います。

ちなみにエラーログの「Action:Consider the following:〜」の部分を、DeepLで日本語翻訳したらこんな感じです。

対処法

以下を検討してください。
	埋め込みデータベース(H2、HSQL、Derby)が必要な場合は、クラスパスに記述してください。
	特定のプロファイルから読み込むデータベース設定がある場合、それを有効にする必要があるかもしれません (現在、有効なプロファイルはありません)。

(広告)AmazonでSpring Boot3(バージョン3系)の初心者向け入門書を探す!本でSpring Bootプログラミング開発を体系的に勉強する!

対処法の1つ目に「埋め込みデータベース(H2、HSQL、Derby)が必要な場合は、〜」とあるので、H2のライブラリを追加してみます。

pom.xmlを直接編集するなら、このdependencyタグを追加します。

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>runtime</scope>
</dependency>
(*Springスタータープロジェクト依存関係画面から選択するなら、「H2 Database」というライブラリを追加する。)

これでSpring Bootを起動したらエラーは発生する事なく起動しました。

また、対処法の2つ目に「特定のプロファイルから読み込むデータベース設定がある場合、〜」とあるので、例えば、Spring BootアプリのDBにMySQLやMariaDBを使うなら、まずはMySQLドライバー、MariaDBドライバーのライブラリを追加する必要があります。

pom.xmlを直接編集するなら、各DBドライバーのdependencyタグを追加します。
■MySQLの場合

<dependency>
	<groupId>com.mysql</groupId>
	<artifactId>mysql-connector-j</artifactId>
	<scope>runtime</scope>
</dependency>
■MariaDBの場合
<dependency>
	<groupId>org.mariadb.jdbc</groupId>
	<artifactId>mariadb-java-client</artifactId>
	<scope>runtime</scope>
</dependency>
(*Springスタータープロジェクト依存関係画面から選択するなら、「MySQL Driver」か「MariaDB Driver」というライブラリを追加する。)

これでSpring Bootを起動しても、まだ問題のエラーは発生しますが、appapplication.propertiesファイルにMySQL(MariaDB)の接続設定を書いたら問題なく起動できました(事前にMySQL(MariaDB)サーバをインストールして起動して準備しておく必要がある)。

appapplication.propertiesのMySQL接続設定例です。(設定例なので、DB名、ユーザ名、パスワードなどは自分の環境に置き換えてください。)

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=theuser
spring.datasource.password=thepassword
MariaDBの接続設定例です。
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/hogedb
spring.datasource.username=theuser
spring.datasource.password=thepassword

もしもDBはMySQLやMariaDBを使う予定だけどまだMySQL(MariaDB)サーバの準備をしていない、MySQL(MariaDB)の準備を後回しにしたい場合、とりあえず「H2 Database」ライブラリを追加して今回問題のエラーを回避しておく。そして、MySQL(MariaDB)の準備ができたらH2 Databaseライブラリを削除してMySQL(MariaDB) Driverライブラリを追加して接続設定すればいいんじゃないかと思います。

試してないですが、PostgreSQLなどの他のDBでも同じ感じでいけるんじゃないかと思います。

別ページでSpring Bootの入門者や初心者向けに、Spring Boot3のプロジェクトを作成してMySQL(MariaDB)と連携した簡単なWebアプリ(Webサイト)の開発について書いているので、興味のある方は是非参考にしてください。
Spring Boot3 + MySQL(MariaDB)のウェブ開発入門

MySQLとMariaDBのインストール方法についても別ページで説明しています。
MySQLのインストール【macOS】
MySQL8のインストール方法(ec2,CentOS7)
MariaDB10.6(10.5)のインストール(Amazon Linux2(ec2),CentOS7)、WordPressの環境構築