| この記事の要点 |
|---|
|
@Value の基本
application.properties や application.yml に書いた設定値を、Spring 管理 Bean のフィールドに自動注入するアノテーションです。
例: プロパティ注入
# application.properties
app.host=api.example.com
app.port=8080
app.timeout=5000
app.features.enabled=true
app.tags=java,spring,boot
@Service
public class ApiClient {
@Value("${app.host}")
private String host;
@Value("${app.port}")
private int port;
@Value("${app.timeout}")
private long timeout;
@Value("${app.features.enabled}")
private boolean enabled;
@Value("${app.tags}")
private List<String> tags; // カンマ区切り自動分割
}
デフォルト値の指定
プロパティが未定義の場合に使う値を : の後に指定:
@Value("${app.host:localhost}") // app.host が未定義なら "localhost"
private String host;
@Value("${app.port:8080}") // 数値もOK
private int port;
@Value("${app.timeout:}") // 空文字
private String timeout;
// プロパティが空 / 未定義の時に null
@Value("${app.optional:#{null}}") // SpEL の null
private String optional;
SpEL(Spring Expression Language)
単純なプロパティ値だけでなく、式を評価できます。
// システムプロパティ
@Value("#{systemProperties['user.home']}")
private String userHome;
// 環境変数
@Value("#{environment['PATH']}")
private String envPath;
// 他の Bean のフィールド参照
@Value("#{appConfig.maxConnections}")
private int maxConn;
// 計算
@Value("#{2 * 1024}")
private int size;
// 条件式
@Value("#{${app.debug} ? 'DEBUG' : 'PROD'}")
private String mode;
// リスト
@Value("#{T(java.util.Arrays).asList('a', 'b', 'c')}")
private List<String> items;
コンストラクタ注入(推奨)
フィールド注入よりコンストラクタ注入が推奨されます(テスト容易、final 化、循環依存検出):
@Service
public class ApiClient {
private final String host;
private final int port;
public ApiClient(
@Value("${app.host}") String host,
@Value("${app.port}") int port
) {
this.host = host;
this.port = port;
}
}
複雑な設定は @ConfigurationProperties を使う
関連するプロパティをまとめて受け取るなら @ConfigurationProperties の方が優れます:
// application.yml
app:
api:
host: api.example.com
port: 8080
timeout: 5000
retry:
max-attempts: 3
delay: 1000
@Component
@ConfigurationProperties(prefix = "app.api")
public class ApiProperties {
private String host;
private int port;
private long timeout;
private Retry retry = new Retry();
public static class Retry {
private int maxAttempts;
private long delay;
// getters/setters
}
// getters/setters
}
メリット:
- 型安全 + ネスト構造をそのまま受け取れる
- バリデーション (
@Validated+ Bean Validation) - IDE 補完が効く(メタデータ自動生成)
プロパティの優先順位
Spring Boot で同名プロパティが複数ソースにある場合の優先順位(高い順):
- コマンドライン引数 (
--app.host=...) - OS 環境変数 (
APP_HOST=...) application-{profile}.propertiesapplication.properties@PropertySourceで読み込んだ外部ファイル- デフォルトプロパティ
よくあるトラブル
Q. プロパティが注入されず null になる
- クラスが Bean になっていない(
@Service等が未付与) newでインスタンス化している(Spring 経由でないと注入されない)- プロパティキーのタイポ(
app.hostvsapp.hosts) - YAML のインデントミス
Q. IllegalArgumentException: Could not resolve placeholder
指定したプロパティが見つかりません。デフォルト値(${key:default})を付けるか、プロパティを定義してください。
Q. 型変換エラー(NumberFormatException)
例: @Value("${app.port}") で int 型に注入しようとして文字列が "abc"。プロパティの値を確認。
関連記事
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09