Micronautで設定値を取得する方法!@Valueと@ConfigurationPropertiesの使い分け完全解説
生徒
「Micronautでアプリの設定値を取得するには、どの方法が良いのでしょうか?」
先生
「Micronautでは@Valueと@ConfigurationPropertiesという二つの方法があります。それぞれ使い方や適した場面が異なるので理解しておくと便利です。」
生徒
「具体的にどんな違いがあるんですか?」
先生
「それでは、設定値取得の基本とサンプルを交えて順番に解説していきましょう。」
1. @Valueアノテーションを使った設定値取得
@Valueアノテーションはプロパティファイルや環境変数の単一の値を取得するときに便利です。シンプルな設定や一箇所でしか使わない値に適しています。プロパティはapplication.ymlやapplication.propertiesに記述できます。
package com.example.config;
import io.micronaut.context.annotation.Value;
import jakarta.inject.Singleton;
@Singleton
public class AppConfig {
@Value("${app.name}")
String appName;
public String getAppName() {
return appName;
}
}
この例では、application.ymlに定義されたapp.nameの値をappNameフィールドに注入しています。シンプルで手軽に設定値を取得可能です。
SEOキーワード:Micronaut @Value、設定値取得、Java DI 設定、Micronaut application.yml 参照
2. @ConfigurationPropertiesを使った設定値取得
一方、@ConfigurationPropertiesは複数の関連する設定値をまとめて取得する場合に便利です。階層化された設定や複数フィールドを管理する場合に推奨されます。Micronautは自動的にプロパティをマッピングしてくれます。
package com.example.config;
import io.micronaut.context.annotation.ConfigurationProperties;
import jakarta.inject.Singleton;
@ConfigurationProperties("app")
@Singleton
public class AppProperties {
private String name;
private String version;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
application.ymlでは以下のように記述します。
app:
name: MicronautSample
version: 1.0.0
このように@ConfigurationPropertiesを使うと、app.nameやapp.versionをオブジェクトとしてまとめて扱えるので、複数箇所で設定値を利用する場合に便利です。
SEOキーワード:Micronaut @ConfigurationProperties、設定値まとめ取得、Java プロパティマッピング、Micronaut application.yml 階層設定
3. @Valueと@ConfigurationPropertiesの使い分け方
単一の設定値を取得する場合は@Valueが手軽で簡単です。一方、関連する設定を複数まとめて取得したい場合や、設定値のグループ化を行いたい場合は@ConfigurationPropertiesを使います。
たとえば、データベース接続設定や外部APIのエンドポイント情報など、複数のプロパティをまとめて管理したい場合には@ConfigurationPropertiesを使うと、コードが整理され、可読性や保守性も向上します。
SEOキーワード:Micronaut 設定値使い分け、@Value 使い方、@ConfigurationProperties 利用方法、Java 設定管理、Micronaut DI 設定注入
4. サービスでの設定値利用例
設定値を取得したら、サービスクラスで活用できます。例えばアプリ名やバージョンをログ出力したり、条件分岐に利用することが可能です。
package com.example.service;
import com.example.config.AppProperties;
import jakarta.inject.Singleton;
@Singleton
public class GreetingService {
private final AppProperties appProperties;
public GreetingService(AppProperties appProperties) {
this.appProperties = appProperties;
}
public String greet() {
return "Welcome to " + appProperties.getName() + " v" + appProperties.getVersion();
}
}
このように@ConfigurationPropertiesを使うと、複数の設定値をまとめて注入でき、サービスの処理で簡単に利用可能です。
SEOキーワード:Micronaut サービス設定値利用、Java DI 設定注入、Micronaut @ConfigurationProperties サンプル、設定値ログ出力
5. 環境変数やプロファイルごとの設定値取得
Micronautではapplication.ymlのプロファイル機能を利用して、環境ごとに異なる設定値を管理できます。@Valueや@ConfigurationPropertiesはプロファイルに応じた値を自動で取得可能です。
# application-dev.yml
app:
name: MicronautSampleDev
version: 1.0.1
開発環境ではapplication-dev.ymlを読み込み、本番環境ではapplication-prod.ymlを読み込むことで、環境ごとに設定を切り替えられます。
SEOキーワード:Micronaut プロファイル設定、環境別設定値取得、Java プロパティ環境切替、Micronaut @Value 環境対応
6. まとめの前に活用のポイント
@Valueは簡単な単一値取得に、@ConfigurationPropertiesは複数設定値のまとめ管理に適していることを覚えておきましょう。DIコンテナと組み合わせることで、設定値の変更や環境切替も簡単に行え、Micronautアプリケーションの柔軟性が向上します。開発者はこの二つの方法を理解し、適切に使い分けることで、保守性の高いコードを書くことができます。