【Spring Boot】プロパティが読み込まれない原因をやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring Boot を使っていると、
「プロパティが読み込まれない…」
という瞬間に必ず出会います。

  • application.yml の値が反映されない
  • @Value が null になる
  • @ConfigurationProperties が動かない
  • プロファイルごとの設定が切り替わらない

こういった問題は、
設定ファイルの仕組みと読み込み順 を理解すると一気に解決します。

この記事では、プロパティが読み込まれないときに
最初に確認すべきポイントを
やさしく・実務寄り で整理していきます。


プロパティが読み込まれない原因(全体像)

1. YAML の書き方ミス(最も多い)
2. キー名のスペルミス
3. 階層(インデント)が間違っている
4. プロファイルが切り替わっていない
5. @Value の書き方が間違っている
6. @ConfigurationProperties の設定漏れ
7. Bean が管理対象外(@Component がない)
8. application.yml の場所が間違っている

この 8 つを順番に確認すれば、
ほとんどの問題は解決します。

YAML の書き方ミス(最も多い)

よくあるミス

  • インデントがずれている
  • コロンの後にスペースがない
  • タブを使っている(YAML はタブ禁止)

NG 例

YAML
spring:
 datasource:
  url: jdbc:mysql://localhost:3306/test

OK 例

YAML
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test

YAML は インデントが命 です。

キー名のスペルミス

よくあるミス

YAML
sprng: # spring のスペルミス
YAML
datasouce: # datasource のスペルミス

Spring Boot はスペルミスを教えてくれないため、
気づきにくい落とし穴 です。

階層(インデント)が間違っている

NG 例

YAML
server:
port: 8081

OK 例

YAML
server:
  port: 8081

階層がずれると、
そのキーは存在しない扱い になります。

プロファイルが切り替わっていない

よくあるミス

application-dev.yml を作ったのに dev が有効になっていない。

対策

application.yml に書く。

YAML
spring:
  profiles:
    active: dev

ありがちな落とし穴

  • active が test のまま
  • prod が有効になっている
  • IntelliJ の「Active Profiles」が優先されている

@Value の書き方が間違っている

NG

Java
@Value("app.name") // ダブルクォートだけ → 文字列扱い
private String name;

OK

Java
@Value("${app.name}")
private String name;

${} を忘れると、
ただの文字列として扱われます。

@ConfigurationProperties の設定漏れ

よくあるミス

  • @ConfigurationProperties を付けただけ
  • @EnableConfigurationProperties を付け忘れ
  • Bean 登録していない

正しい例

Java
@ConfigurationProperties(prefix = "app")
@Component
public class AppProperties {
    private String name;
}

または

Java
@EnableConfigurationProperties(AppProperties.class)

Bean が管理対象外(@Component がない)

よくあるミス

Java
@ConfigurationProperties(prefix = "app")
public class AppProperties { ... } // ← @Component がない

Bean として登録されていないため、
プロパティが注入されません。

application.yml の場所が間違っている

Spring Boot が読み込む場所は決まっています。

正しい場所

src/main/resources/application.yml

よくあるミス

  • application.yaml(拡張子違い)
  • application.yml が 2 つある
  • resources 配下に置いていない

実務でよくあるトラブルと対処法

ケース1:@Value が null

${} の付け忘れ
→ キー名のスペルミス
→ プロファイル違い

ケース2:ConfigurationProperties が動かない

→ @Component の付け忘れ
→ @EnableConfigurationProperties の付け忘れ
→ prefix が間違っている

ケース3:application-dev.yml が反映されない

→ active プロファイルが dev になっていない
→ IntelliJ の設定が優先されている

ケース4:DB 接続設定が反映されない

→ spring.datasource の階層ミス
→ URL のスペルミス


ログの読み方(おさらい)

プロパティが読み込まれないときは、
ログにこう出ることがあります。

Failed to bind properties under 'app.name'
BindingException
Could not resolve placeholder 'app.name'

この 3 つが出たら、
プロパティの読み込みミスが原因で確定 です。


まとめ

プロパティが読み込まれない原因は、

「YAML のミス」
「キー名のミス」
「プロファイルのミス」
「アノテーションの付け忘れ」

のどれかです。

  • YAML のインデント
  • キー名のスペル
  • active プロファイル
  • @Value の書き方
  • @ConfigurationProperties の設定
  • Bean 登録の有無

難しく聞こえますが、
「YAML → プロファイル → アノテーション」
の順に確認すれば十分です。


decopon
decopon

プロパティが読み込まれない問題は、
最初こそ難しく見えますが、
“原因のパターン” を知っているだけで
落ち着いて対処できるようになります。
あなたの開発が、今日より少しだけ楽になりますように。

moco
moco

YAML さんって、インデントに敏感なんだね…
やさしく扱ってあげたいね。

コメント

タイトルとURLをコピーしました