ホームページ > Java > &#&チュートリアル > Spring でプロのように構成を読み取る

Spring でプロのように構成を読み取る

Mary-Kate Olsen
リリース: 2025-01-23 12:05:13
オリジナル
368 人が閲覧しました

Reading configuration like a pro on Spring

はじめに

ご存知のとおり、Spring では同じ目標を達成するための複数の方法が提供されており、その 1 つは構成ファイルに登録されている値を取得する方法です。

Spring を初めて使用する場合は、@Value アノテーションを使用して application.properties または application.yml ファイルから値を取得するコードに遭遇するかもしれません。このアプローチを使用する場合、問題はありませんが、アプリケーションに不必要な複雑さが生じる可能性があることに注意してください。

@Value 質問

@Value を使用する場合の主な問題は、他の値を含む変数を扱うときです。これには意味がありますか?分かりませんか?例を見てみましょう:

次の構成ファイルがあると仮定します:

<code>mail.user=dev@locahost
mail.password=123
mail.headers.x-from=Ekerdev
mail.headers.x-custom=custom</code>
ログイン後にコピー

次のようにする必要があります:

<code class="language-java">@Service
public class CustomService {
    @Value("${mail.user}")
    private String user;

    @Value("${mail.password}")
    private String password;

    @Value("${mail.headers.x-from}")
    private String xFrom;

    @Value("${mail.headers.x-custom}")
    private String xCustom;
}</code>
ログイン後にコピー

今のところ問題はありません。しかしここで、アプリケーションがコード内の複数の場所でこれらの同じ変数を使用する必要があると想像してください。どれだけの重複コードが得られるか考えてみてください。

解決策

したがって、最良の解決策は、@ConfigurationProperties アノテーションを使用することです。これにより、アプリケーションがクラスに変数を注入しやすくなり、以下の例に示すように、Spring の他の依存関係と同様に変数を使用できるようになります。

Spring 3.x ソリューション 1:

<code class="language-java">@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    Map<String, String> headers
) {}</code>
ログイン後にコピー

Spring 3.x ソリューション 2:

<code class="language-java">@Configuration
@ConfigurationProperties("mail.headers")
public record MailHeadersProperties(
    String xFrom,
    String xCustom
) {}

@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    MailHeadersProperties headers
) {}</code>
ログイン後にコピー

Spring 2.x ソリューション 1:

<code class="language-java">@Data
@AllArgsConstructor
@ConfigurationPropertiesScan
@ConfigurationProperties("mail")
public class MailProperties {
    private String user;
    private String password;
    private Map<String, String> headers;
}</code>
ログイン後にコピー
<code class="language-java">@SpringBootApplication
@ConfigurationPropertiesScan("your.package.mailproperties") //your.package.mailproperties  替换成你的包路径
public class ExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }
}</code>
ログイン後にコピー

サービス使用属性は次のとおりです:

<code class="language-java">@Service
@RequiredArgsConstructor
public class CustomService {
    private final MailProperties mailProperties;
}</code>
ログイン後にコピー

メリット

を使用する主な利点は、コード内で @ConfigurationProperties アノテーションを探す必要がなくなり、コードが読みやすくなることです。 @Value

以上がSpring でプロのように構成を読み取るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート