首頁 > Java > java教程 > 像專業人士一樣在 Spring 上讀取配置

像專業人士一樣在 Spring 上讀取配置

Mary-Kate Olsen
發布: 2025-01-23 12:05:13
原創
367 人瀏覽過

Reading configuration like a pro on Spring

引言

眾所周知,Spring 提供多種實現相同目標的方法,其中一種便是如何擷取設定檔中註冊的值。

如果您是 Spring 新手,可能會遇到使用 @Value 註解從 application.propertiesapplication.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 的方案一:

<code class="language-java">@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    Map<String, String> headers
) {}</code>
登入後複製

Spring 3.x 的方案二:

<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 的方案一:

<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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板