「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 は次の順で決まります。

  1. 自分で DataSource の Bean を定義していれば、それを使う(自動設定はしない)
  2. spring.datasource.url があれば、その url で接続プール(HikariCP)を作る
  3. url が無く、H2・HSQL・Derby が classpath にあれば、組み込み DB をメモリ上に作る
  4. 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} のように環境変数から読むと、設定ファイルに書かずに済みます。

直す順番のチェックリスト

  1. DB を使うアプリか。使わないなら依存を外す
  2. Action の括弧の中で、有効なプロファイルを確かめる
  3. url を書いたファイルが、そのプロファイルで読まれるか
  4. yml の階層が spring → datasource → url になっているか(コロンの後ろの空白も)
  5. ビルド後の build/resources/main・target/classes に設定ファイルがあるか
  6. テストだけなら、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期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?