- Spring
Failed to configure a DataSourceの直し方|原因表
「Failed to configure a DataSource: 'url' attribute is not specified」は、Spring Boot が DB 接続(DataSource)を自動で作ろうとしたのに、接続先の URL が無く、代わりに使える組み込み DB(H2 など)も無かったときの起動エラーです。 Spring Boot 4.1.1 では次の全文で出ます。
***************************
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).
直し方は、DB を使うなら spring.datasource.url を正しく読ませること、DB を使わないなら DB 関係の依存を外すことです。
# src/main/resources/application.yml(PostgreSQL の例)
spring:
datasource:
url: jdbc:postgresql://localhost:5432/demo
username: demo
password: demo
| 原因 | 見分け方 | 対処 |
|---|---|---|
spring.datasource.url を書いていない |
yml・properties に url が無い | url を書く |
| yml のインデント・コロンの誤り | url はあるが位置がずれている | spring: → datasource: → url: の階層に直す |
| url をプロファイル用ファイルにだけ書いた | Action に no profiles are currently active |
プロファイルを有効にする |
| DB を使わないのに JPA・JDBC の依存がある | DB の設定をそもそも書いていない | 依存を外すか自動設定を除外 |
| ドライバの依存が無い | url はあるが別のエラー(Failed to load driver class) |
ドライバを依存に足す |
| テストのときだけ出る | src/test/resources 側の設定が違う |
テスト用の設定・組み込み DB を用意 |
| 別モジュールの application.yml を期待している | 起動するモジュールに設定ファイルが無い | 起動するモジュールに置く |
確認環境:Spring Boot 4.1.1(HikariCP 7.0.2、PostgreSQL JDBC 42.7.13、MySQL Connector/J 9.7.0、H2 2.4.240 は Boot 4.1.1 の依存管理の版)。エラー全文と出る条件は、GitHub の v4.1.1 タグの DataSourceBeanCreationFailureAnalyzer・DataSourceProperties・DataSourceAutoConfiguration のソースで確かめました。yml のインデント誤りでキーがどう変わるかは、Spring Boot と同じ YAML 1.1 の解釈をする PyYAML 6.0.3 で読み込んで確かめました(確認日 2026年10月12日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Failed to configure a DataSourceの直し方|原因表」
エラー全文の読み方
Description:何が足りないか
Description の1行目は、ソースでは次のように組み立てられています。
- 先頭は必ず
Failed to configure a DataSource: - url が空のときだけ
'url' attribute is not specified andが入る - 最後に
no embedded datasource could be configured.(組み込み DB も設定できなかった)
つまり「url が無い」と「組み込み DB も無い」の2つが同時に起きたときのエラーです。 どちらか一方を満たせば、このエラーは消えます。
Reason:どこで止まったか
Reason: の後ろには、内部の例外のメッセージがそのまま入ります。ソースで投げている文は2つでした。
| Reason の文 | 起きる場所 | 意味 |
|---|---|---|
Failed to determine a suitable driver class |
ドライバのクラス名を決める処理 | url が無く、組み込み DB のドライバも見つからない(ほとんどはこちら) |
Failed to determine suitable jdbc url |
url を決める処理 | url が無く、組み込み DB の url も作れない |
ドライバのクラス名は、url から自動で決まります。 jdbc:postgresql: なら org.postgresql.Driver、jdbc:mysql: なら com.mysql.cj.jdbc.Driver です(ソースの DatabaseDriver の対応表)。url が無いと決められないため、「ドライバが決められない」という Reason になります。spring.datasource.driver-class-name は、通常は書かなくても決まります。
Action:何を確かめるか
| Action の文 | 出る条件 |
|---|---|
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. |
組み込み DB が classpath に無い |
… you may need to activate it (no profiles are currently active). |
プロファイルが1つも有効でない |
… you may need to activate it (the profiles dev are currently active). |
有効なプロファイルの名前が入る |
Action の最後の括弧の中は、必ず見ます。 no profiles are currently active なのに url を application-dev.yml に書いていれば、原因はプロファイルです。
いつこのエラーになるか(自動設定の流れ)
Spring Boot 4.1.1 の DataSourceAutoConfiguration を読むと、DataSource は次の順で決まります。
- 自分で
DataSourceの Bean を定義していれば、それを使う(自動設定はしない) spring.datasource.urlがあれば、その url で接続プール(HikariCP)を作る- url が無く、H2・HSQL・Derby が classpath にあれば、組み込み DB をメモリ上に作る
- url も組み込み DB も無ければ、このエラー
自動設定が動くきっかけは、DataSource のクラスが classpath にあることです。 spring-boot-starter-data-jpa・spring-boot-starter-jdbc・MyBatis の starter などを入れると、DB の設定を書いていなくても、この流れが始まります。
原因1:url を書いていない・書いた場所が違う
最低限、次の3つを書きます。
spring:
datasource:
url: jdbc:postgresql://localhost:5432/demo
username: demo
password: demo
application.properties なら次のとおりです。
spring.datasource.url=jdbc:postgresql://localhost:5432/demo
spring.datasource.username=demo
spring.datasource.password=demo
| 確かめること | 正しい形 |
|---|---|
| ファイルの場所 | src/main/resources/application.yml(または .properties) |
| キーの名前 | spring.datasource.url(uri や jdbc-url ではない) |
| ファイル名 | application.yml(applicaton.yml などの綴り違いに注意) |
| ビルド後に入っているか | build/resources/main や target/classes に同じファイルがあるか |
jdbc-url は、自分で @ConfigurationProperties を使って Hikari の DataSource を作るときの名前です。 自動設定では url を使います。設定キーの一覧は関連記事「Spring Boot application.properties設定一覧」で扱っています。
原因2:yml のインデント・コロンの誤り
YAML は字下げで階層が決まるため、1段ずれると別のキーになります。 Spring Boot と同じ YAML 1.1 の解釈で読み込み、平らなキーにした結果です。
# 誤り1:jpa の下に入ってしまった
spring:
jpa:
show-sql: true
datasource:
url: jdbc:postgresql://localhost:5432/demo
# 誤り2:datasource の字下げが無い
spring:
datasource:
url: jdbc:postgresql://localhost:5432/demo
# 誤り3:コロンの後ろに空白が無い
spring:
datasource:
url:jdbc:postgresql://localhost:5432/demo
| 書き方 | 読み込まれたキーと値 |
|---|---|
| 正しい形 | spring.datasource.url = jdbc:postgresql://localhost:5432/demo |
| 誤り1 | spring.jpa.datasource.url(別のキー) |
| 誤り2 | spring = 空、datasource.url(spring. が付かない) |
| 誤り3 | spring.datasource = url:jdbc:postgresql://…(1つの文字列) |
どれも YAML としては正しいので、読み込みのエラーは出ません。 url が無いことになり、DataSource のエラーとして表に出ます。字下げはタブではなく空白で、同じ階層は同じ数の空白に揃えます。
原因3:プロファイル用のファイルにだけ書いた
src/main/resources/
├─ application.yml ← url が無い
└─ application-dev.yml ← url はここだけ
この形で、プロファイルを指定せずに起動すると、application-dev.yml は読まれません。Action に (no profiles are currently active). と出ます。
# 起動時に指定する
java -jar app.jar --spring.profiles.active=dev
# 環境変数で指定する
SPRING_PROFILES_ACTIVE=dev java -jar app.jar
# application.yml で既定のプロファイルを決める
spring:
profiles:
default: dev
spring.profiles.default で決めたプロファイルは「有効(active)」には数えられません。 ソースでは Action の括弧に有効なプロファイルだけを出すため、default: dev で dev が効いていても (no profiles are currently active). と出ます。
IDE から起動するときは、実行構成の「Active profiles」や環境変数を確かめます。プロファイルの指定方法と優先順位は、関連記事「Spring Bootプロファイル切り替え|application.ymlと優先順位」で扱っています。
原因4:DB を使わないのに依存が入っている
start.spring.io で試しに「Spring Data JPA」などを選んだまま、DB の設定を書かずに起動すると、このエラーになります。
| 状況 | 対処 |
|---|---|
| DB をまったく使わない | spring-boot-starter-data-jpa・spring-boot-starter-jdbc・MyBatis の starter を依存から外す(一番すっきりする) |
| 後で使うが、今は起動だけしたい | 下の「自動設定を除外する」 |
| 開発中だけ手軽な DB がほしい | H2 を依存に足す(url を書かなくても組み込み DB で起動する) |
自動設定を除外する(Spring Boot 4 のクラス名)
Spring Boot 4 では、自動設定クラスのパッケージが Boot 3 から変わっています。 Boot 4.1.1 の自動設定の一覧ファイル(AutoConfiguration.imports)で確かめた名前です。
| 自動設定 | Spring Boot 4.1.1 のクラス名 |
|---|---|
| DataSource | org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration |
| JDBC のトランザクション | org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration |
| JPA(Hibernate) | org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration |
Boot 3 までの org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration は、Boot 4 では使えません。
import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class DemoApplication { … }
# 設定ファイルで除外する場合
spring:
autoconfigure:
exclude:
- org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration
DataSource を除外すると、DB を使う部品は全部動きません。 JPA の自動設定は @ConditionalOnSingleCandidate(DataSource.class) なので作られず、リポジトリや MyBatis の Mapper を使うクラスがあれば、今度は「required a bean of type … that could not be found」になります。除外は「DB を使うクラスがまだ無い」ときの一時的な手段です。
原因5:ドライバの依存が無い
url を書いても、ドライバ(DB と話すためのライブラリ)が無いと別のエラーになります。HikariCP 7.0.2 のソースでは、ドライバのクラスを読み込めないときに次の文の例外を投げます。
Failed to load driver class org.postgresql.Driver
spring.datasource.driver-class-name を書いていて、そのクラスが無いときは、Spring Boot 側で Cannot load driver class: 〈クラス名〉 になります(DataSourceProperties のソース)。
どちらも「Failed to configure a DataSource」とは文が違います。 url は読めているので、依存を足せば直ります。下の DB 別の設定例に、依存も載せています。
原因6:テストのときだけ出る
src/test/resources/application.yml があると、テストではこちらが src/main/resources の同名ファイルより優先されることがあります(classpath で先に見つかるため)。テスト側に url が無いと、テストだけでこのエラーになります。
| テストの書き方 | DataSource の扱い | このエラーを避けるには |
|---|---|---|
@SpringBootTest |
本番と同じ自動設定 | テスト用の url を書くか、H2 を test 依存に足す |
@DataJpaTest・@JdbcTest |
組み込み DB に置き換える(既定 Replace.NON_TEST) |
H2 などを test 依存に足す |
Testcontainers(@ServiceConnection) |
コンテナの DB に接続 | url は書かなくてよい(接続情報が自動で渡る) |
@DataJpaTest で組み込み DB が無いと、Spring Boot 4.1.1 のソースでは次の文になります。
Failed to replace DataSource with an embedded database for tests. If you want an embedded database please put a supported one on the classpath or tune the replace attribute of @AutoConfigureTestDatabase.
テストの書き方の全体は、関連記事「Spring Bootテスト入門|@WebMvcTestとMockMvcの使い分け」で扱っています。
原因7:マルチモジュールで設定ファイルが読めない
demo-parent
├─ demo-domain ← application.yml をここに置いた
└─ demo-web ← @SpringBootApplication はこちら
設定ファイルは、起動するモジュール(@SpringBootApplication がある側)に置きます。 部品側のモジュールの application.yml は、jar として取り込まれても、起動側にも application.yml があれば、同じ名前のため片方しか読まれません。共通の設定を部品側に持たせたいときは、application-domain.yml のように名前を分け、起動側で spring.config.import か spring.profiles.include で読み込みます。
DB 別の設定例(依存と application.yml)
PostgreSQL
// build.gradle.kts
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
runtimeOnly("org.postgresql:postgresql")
}
spring:
datasource:
url: jdbc:postgresql://localhost:5432/demo
username: demo
password: ${DB_PASSWORD}
MySQL
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo
username: demo
password: ${DB_PASSWORD}
H2(ファイルに保存する場合・メモリだけの場合)
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
runtimeOnly("com.h2database:h2")
}
# ファイルに保存(再起動してもデータが残る)
spring:
datasource:
url: jdbc:h2:file:./data/demo
username: sa
password:
H2 は url を書かなくても起動します。 そのときはメモリ上の組み込み DB になり、名前は既定で毎回ランダムに作られます(spring.datasource.generate-unique-name の既定値が true)。
| DB | url の形 | ドライバのクラス(url から自動) | 依存 |
|---|---|---|---|
| PostgreSQL | jdbc:postgresql://ホスト:5432/DB名 |
org.postgresql.Driver |
org.postgresql:postgresql |
| MySQL | jdbc:mysql://ホスト:3306/DB名 |
com.mysql.cj.jdbc.Driver |
com.mysql:mysql-connector-j |
| MariaDB | jdbc:mariadb://ホスト:3306/DB名 |
org.mariadb.jdbc.Driver |
org.mariadb.jdbc:mariadb-java-client |
| H2(ファイル) | jdbc:h2:file:./data/DB名 |
org.h2.Driver |
com.h2database:h2 |
| H2(メモリ) | jdbc:h2:mem:DB名(または url を書かない) |
org.h2.Driver |
com.h2database:h2 |
パスワードは ${DB_PASSWORD} のように環境変数から読むと、設定ファイルに書かずに済みます。
直す順番のチェックリスト
- DB を使うアプリか。使わないなら依存を外す
- Action の括弧の中で、有効なプロファイルを確かめる
- url を書いたファイルが、そのプロファイルで読まれるか
- yml の階層が
spring→datasource→urlになっているか(コロンの後ろの空白も) - ビルド後の
build/resources/main・target/classesに設定ファイルがあるか - テストだけなら、
src/test/resourcesの設定と test 依存を確かめる
よくある質問
Q. url を書いたのに、まだ同じエラーが出ます。
A. 起動ログの最初のほうに The following 1 profile is active: "dev"、プロファイルが無ければ No active profile set, falling back to 1 default profile: "default" の行が出ます(SpringApplication のソースの文面)。その行と、url を書いたファイル名が合っているかを確かめます。次に、yml の字下げを上の表の形と見比べます。
Q. 環境変数で url を渡したいです。
A. SPRING_DATASOURCE_URL という名前の環境変数は spring.datasource.url として読まれます(Spring Boot の緩い名前の対応)。Docker や CI ではこの形がよく使われます。
Q. 自分で DataSource の @Bean を書いた場合もこのエラーになりますか。
A. 自分で DataSource の Bean を定義すると、自動設定の DataSource は作られません。このエラーは自動設定の中で出るものなので、自分の @Bean の中で url が空なら、別の(Hikari などの)エラーになります。
Q. JPA を入れずに JdbcTemplate だけ使う場合も同じですか。
A. 同じです。spring-boot-starter-jdbc でも同じ自動設定が動きます。JPA の使い方は関連記事「Spring Data JPA使い方|クエリメソッド命名一覧と@Query実例」で扱っています。
まとめ
- url が無く、組み込み DB も無いときの起動エラー。Reason の多くは
Failed to determine a suitable driver class - まず Action の括弧(有効なプロファイル) を見る
- yml は1段ずれると別のキーになり、読み込みエラーにはならない
- DB を使わないなら依存を外す。除外するなら Boot 4 は
org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration - ドライバが無いときは別の文(
Failed to load driver class …)になる - テストでは
@DataJpaTestは組み込み DB に置き換えるので H2 などを test 依存に
参考・出典
確認日はいずれも 2026年10月12日です。
- Spring Boot リファレンス「SQL Databases」:https://docs.spring.io/spring-boot/reference/data/sql.html
- Spring Boot How-to「Data Access」:https://docs.spring.io/spring-boot/how-to/data-access.html
- Spring Boot リファレンス「Externalized Configuration」:https://docs.spring.io/spring-boot/reference/features/external-config.html
- Spring Boot ソースコード(v4.1.1)DataSourceBeanCreationFailureAnalyzer:https://github.com/spring-projects/spring-boot/blob/v4.1.1/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/autoconfigure/DataSourceBeanCreationFailureAnalyzer.java
- Spring Boot ソースコード(v4.1.1)DataSourceProperties:https://github.com/spring-projects/spring-boot/blob/v4.1.1/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/autoconfigure/DataSourceProperties.java
- HikariCP ソースコード(7.0.2)HikariConfig:https://github.com/brettwooldridge/HikariCP/blob/HikariCP-7.0.2/src/main/java/com/zaxxer/hikari/HikariConfig.java
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Failed to configure a DataSourceの直し方|原因表」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。