欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Boot實(shí)現(xiàn)配置文件的自動(dòng)加載和刷新功能

 更新時(shí)間:2023年05月31日 08:58:07   作者:Sun?3285  
這篇文章我們介紹了Spring?Boot如何實(shí)現(xiàn)配置文件的自動(dòng)加載和刷新,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

Spring Boot如何實(shí)現(xiàn)配置文件的自動(dòng)加載和刷新?

在使用Spring Boot開發(fā)應(yīng)用程序時(shí),配置文件是非常重要的組成部分。在不同的環(huán)境中,我們可能需要使用不同的配置文件,例如在開發(fā)、測試和生產(chǎn)環(huán)境中使用不同的配置文件。而且,當(dāng)我們更改配置文件時(shí),我們希望應(yīng)用程序能夠自動(dòng)加載和刷新配置文件,而無需重啟應(yīng)用程序。在這篇文章中,我們將探討Spring Boot如何實(shí)現(xiàn)配置文件的自動(dòng)加載和刷新。

在這里插入圖片描述

Spring Boot的配置文件

Spring Boot使用基于屬性的配置文件,通常是YAML或Properties格式的文件。這些配置文件包含應(yīng)用程序的配置信息,例如數(shù)據(jù)庫連接信息、日志配置、端口號(hào)等。

在Spring Boot中,配置文件的默認(rèn)名稱為application.ymlapplication.properties。Spring Boot會(huì)在應(yīng)用程序啟動(dòng)時(shí)自動(dòng)加載這些配置文件,并將它們解析為一個(gè)名為Environment的對象。我們可以使用Environment對象獲取配置文件中的屬性值。

自動(dòng)加載配置文件

在Spring Boot中,配置文件的自動(dòng)加載是默認(rèn)啟用的。這意味著當(dāng)應(yīng)用程序啟動(dòng)時(shí),Spring Boot會(huì)自動(dòng)加載application.ymlapplication.properties配置文件,并將其轉(zhuǎn)換為Environment對象。我們可以使用@Value注解或Environment對象來獲取配置文件中的屬性值。

例如,我們可以在application.yml文件中設(shè)置應(yīng)用程序的端口號(hào):

server:
  port: 8080

然后在代碼中使用@Value注解獲取端口號(hào):

@Value("${server.port}")
private int port;

這樣就可以在代碼中獲取到端口號(hào)的值了。

配置文件的刷新

當(dāng)我們更改配置文件時(shí),我們希望應(yīng)用程序能夠自動(dòng)加載和刷新配置文件,而無需重啟應(yīng)用程序。Spring Boot提供了兩種方式實(shí)現(xiàn)配置文件的刷新:基于輪詢和基于Webhook。

基于輪詢的配置文件刷新

基于輪詢的配置文件刷新是Spring Boot默認(rèn)提供的一種方式。Spring Boot會(huì)定期輪詢配置文件的修改時(shí)間,如果發(fā)現(xiàn)配置文件被修改,則會(huì)重新加載配置文件。

默認(rèn)情況下,Spring Boot會(huì)每隔5秒鐘輪詢一次配置文件的修改時(shí)間。我們可以通過設(shè)置spring.cloud.refresh.interval屬性來更改輪詢間隔時(shí)間。例如,將輪詢間隔時(shí)間設(shè)置為10秒:

spring:
  cloud:
    refresh:
      interval: 10s

在代碼中,我們可以使用@RefreshScope注解來標(biāo)記需要刷新的Bean。當(dāng)配置文件發(fā)生變化時(shí),這些Bean將被重新創(chuàng)建。

例如,我們有一個(gè)名為MyService的服務(wù)類:

@Service
@RefreshScope
public class MyService {
    @Value("${my.config}")
    private String config;
    // ...
}

當(dāng)我們更改application.yml文件中的my.config屬性時(shí),Spring Boot會(huì)自動(dòng)重新加載配置文件,并重新創(chuàng)建MyService類的實(shí)例。在重新創(chuàng)建實(shí)例時(shí),config屬性的值也將被更新。

基于Webhook的配置文件刷新

基于Webhook的配置文件刷新是另一種實(shí)現(xiàn)配置文件刷新的方式。與基于輪詢的刷新不同,基于Webhook的刷新方式是在配置文件發(fā)生變化時(shí),由另一個(gè)應(yīng)用程序發(fā)送HTTP請求通知當(dāng)前應(yīng)用程序刷新配置文件。

要啟用基于Webhook的配置文件刷新,我們需要引入spring-cloud-starter-config依賴,并在application.ymlapplication.properties配置文件中設(shè)置以下屬性:

spring:
  cloud:
    config:
      server:
        git:
          uri: <git倉庫地址>
          username: <用戶名>
          password: <密碼>
          search-paths: <配置文件路徑>
          clone-on-start: true
      label: <git分支>
      refresh:
        enabled: true

其中,uri屬性指定了配置文件所在的Git倉庫地址,usernamepassword屬性是Git倉庫的登錄信息,search-paths屬性指定了配置文件所在的路徑,clone-on-start屬性表示在應(yīng)用程序啟動(dòng)時(shí)是否從Git倉庫克隆配置文件。label屬性指定了Git倉庫的分支名稱,refresh.enabled屬性表示是否啟用配置文件的自動(dòng)刷新。

在配置完成后,我們需要?jiǎng)?chuàng)建一個(gè)Webhook來通知應(yīng)用程序刷新配置文件。我們可以使用GitHub或GitLab等代碼托管平臺(tái)的Webhook功能,將其配置為在配置文件發(fā)生變化時(shí)向應(yīng)用程序發(fā)送HTTP請求。

當(dāng)應(yīng)用程序接收到Webhook請求時(shí),Spring Boot會(huì)自動(dòng)從Git倉庫中拉取最新的配置文件并重新加載。我們可以使用@RefreshScope注解來標(biāo)記需要刷新的Bean,當(dāng)配置文件發(fā)生變化時(shí),這些Bean將被重新創(chuàng)建。

注意事項(xiàng)

在使用配置文件自動(dòng)刷新功能時(shí),有一些需要注意的事項(xiàng):

  • 配置文件中的屬性必須使用@Value注解或Environment對象來獲取,否則在配置文件刷新后,應(yīng)用程序中的屬性值將不會(huì)更新。
  • 配置文件中的屬性必須使用@RefreshScope注解來標(biāo)記需要刷新的Bean,否則在配置文件刷新后,應(yīng)用程序中的Bean實(shí)例將不會(huì)更新。
  • 在使用基于Webhook的配置文件刷新時(shí),需要注意Git倉庫的訪問權(quán)限和安全性,避免敏感信息泄露。

示例代碼

下面是使用Spring Boot實(shí)現(xiàn)配置文件自動(dòng)加載和刷新的示例代碼。假設(shè)我們有一個(gè)名為MyService的服務(wù)類,它依賴于配置文件中的my.config屬性:

@Service
@RefreshScope
public class MyService{
    @Value("${my.config}")
    private String config;
    public String getConfig() {
        return config;
    }
}

application.yml文件中,我們設(shè)置了my.config屬性的值為default

my:
  config: default

現(xiàn)在,我們可以使用MyService類的getConfig()方法來獲取my.config屬性的值。

基于輪詢的配置文件刷新

為了演示基于輪詢的配置文件刷新,我們將設(shè)置輪詢間隔時(shí)間為10秒,并在10秒后更改my.config屬性的值。在application.yml文件中,添加以下配置:

spring:
  cloud:
    refresh:
      interval: 10s

在代碼中,我們需要使用@RefreshScope注解標(biāo)記MyService類,以便在配置文件發(fā)生變化時(shí)重新創(chuàng)建實(shí)例。然后,我們使用一個(gè)ScheduledExecutorService定期更改my.config屬性的值:

@Service
@RefreshScope
public class MyService {
    @Value("${my.config}")
    private String config;
    public String getConfig() {
        return config;
    }
}
@SpringBootApplication
public class Application {
    private static final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
   // 定義一個(gè)計(jì)數(shù)器,用于記錄更改次數(shù)
    private static int count = 0;
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        // 每隔10秒更改一次my.config屬性的值
        executor.scheduleWithFixedDelay(() -> {
            count++;
            String newValue = "value_" + count;
            System.out.println("Changing my.config to " + newValue);
            System.setProperty("my.config", newValue);
        }, 0L, 10L, TimeUnit.SECONDS);
    }
}

在應(yīng)用程序啟動(dòng)后,MyService類的實(shí)例將被創(chuàng)建,并獲取my.config屬性的值為default。然后,每隔10秒鐘,定時(shí)任務(wù)會(huì)更改my.config屬性的值,并輸出日志。在日志中,我們可以看到每次更改屬性值后,MyService類的實(shí)例也會(huì)重新創(chuàng)建,并獲取新的屬性值。

基于Webhook的配置文件刷新

為了演示基于Webhook的配置文件刷新,我們需要將配置文件存儲(chǔ)在Git倉庫中,并配置Webhook通知應(yīng)用程序刷新配置文件。假設(shè)我們將配置文件存儲(chǔ)在名為my-config的Git倉庫中,分支名稱為main,配置文件路徑為/config/application.yml。然后,我們需要配置應(yīng)用程序以從Git倉庫中拉取配置文件,并啟用配置文件的自動(dòng)刷新。

application.yml文件中,添加以下配置:

spring:
  cloud:
    config:
      server:
        git:
          uri: <Git倉庫地址>
          username: <用戶名>
          password: <密碼>
          search-paths: /config
      label: main
      refresh:
        enabled: true

其中,uri屬性指定了Git倉庫的地址,usernamepassword屬性是Git倉庫的登錄信息,search-paths屬性指定了配置文件所在的路徑。label屬性指定了Git倉庫的分支名稱,refresh.enabled屬性表示是否啟用配置文件的自動(dòng)刷新。

在代碼中,我們需要使用@RefreshScope注解標(biāo)記MyService類,以便在配置文件發(fā)生變化時(shí)重新創(chuàng)建實(shí)例。然后,我們可以使用一個(gè)@Scheduled注解的方法定期輸出my.config屬性的值:

@Service
@RefreshScope
public class MyService {
    @Value("${my.config}")
    private String config;
    public String getConfig() {
        return config;
    }
}
@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    @Autowired
    private MyService myService;
    @Scheduled(fixedRate = 5000)
    public void printConfig() {
        System.out.println("my.config = " + myService.getConfig());
    }
}

在應(yīng)用程序啟動(dòng)后,MyService類的實(shí)例將被創(chuàng)建,并獲取my.config屬性的值。然后,定時(shí)任務(wù)將定期輸出my.config屬性的值。

現(xiàn)在,我們可以在my-config倉庫中更改application.yml文件中的my.config屬性的值,并推送更改到遠(yuǎn)程倉庫。然后,我們可以在GitHub或GitLab等代碼托管平臺(tái)上配置Webhook,將其配置為在配置文件發(fā)生變化時(shí)向應(yīng)用程序發(fā)送HTTP請求。當(dāng)應(yīng)用程序接收到Webhook請求時(shí),Spring Boot會(huì)自動(dòng)從Git倉庫中拉取最新的配置文件,并重新加載。在重新加載配置文件時(shí),MyService類的實(shí)例也將被重新創(chuàng)建,并獲取新的屬性值。我們可以在應(yīng)用程序的控制臺(tái)輸出中看到,每次更改配置文件后,定時(shí)任務(wù)輸出的my.config屬性值也會(huì)相應(yīng)地更新。

總結(jié)

在本文中,我們介紹了Spring Boot如何實(shí)現(xiàn)配置文件的自動(dòng)加載和刷新。配置文件是應(yīng)用程序的重要組成部分,而配置文件的自動(dòng)加載和刷新可以使應(yīng)用程序更加靈活和可配置。我們討論了基于輪詢和基于Webhook的配置文件刷新方式,并給出了相應(yīng)的示例代碼。在實(shí)踐中,我們需要注意一些細(xì)節(jié),例如配置文件中屬性的獲取方式、Bean的刷新方式、Git倉庫的訪問權(quán)限和安全性等。希望本文能夠?qū)Υ蠹依斫釹pring Boot的配置文件自動(dòng)加載和刷新有所幫助。

到此這篇關(guān)于Spring Boot如何實(shí)現(xiàn)配置文件的自動(dòng)加載和刷新的文章就介紹到這了,更多相關(guān)Spring Boot配置文件的自動(dòng)加載和刷新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合ELK做日志超完整詳細(xì)教程

    SpringBoot整合ELK做日志超完整詳細(xì)教程

    本文詳細(xì)介紹了如何在springboot中快速接入ELK的過程,ELK可以說在實(shí)際項(xiàng)目中具有很好的適用價(jià)值,不管是小項(xiàng)目,還是中大型項(xiàng)目,都具備普適參考性,值得深入了解和學(xué)習(xí),感興趣的朋友一起看看吧
    2024-01-01
  • 基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例

    基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例

    本篇文章主要介紹了基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • 淺談HBase在SpringBoot項(xiàng)目里的應(yīng)用(含HBaseUtil工具類)

    淺談HBase在SpringBoot項(xiàng)目里的應(yīng)用(含HBaseUtil工具類)

    這篇文章主要介紹了淺談HBase在SpringBoot項(xiàng)目里的應(yīng)用(含HBaseUtil工具類),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • JDK13的新特性之AppCDS詳解

    JDK13的新特性之AppCDS詳解

    AppCDS的全稱是Application Class-Data Sharing。主要是用來在不同的JVM中共享Class-Data信息,從而提升應(yīng)用程序的啟動(dòng)速度。這篇文章主要介紹了JDK13的新特性:AppCDS詳解,需要的朋友可以參考下
    2020-05-05
  • Java基礎(chǔ)篇之分布式版本控制工具Git

    Java基礎(chǔ)篇之分布式版本控制工具Git

    Git是一個(gè)開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理。 也是Linus Torvalds為了幫助管理Linux內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件
    2021-10-10
  • Java反射機(jī)制詳解

    Java反射機(jī)制詳解

    Java的反射機(jī)制是在運(yùn)行狀態(tài)中,對于任何一個(gè)類,都可以知道這個(gè)類的所有屬性和方法,對于任何一個(gè)對象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息,這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對象方法的功能稱為Java的反射機(jī)制
    2022-09-09
  • IDEA創(chuàng)建Maven項(xiàng)目一直顯示正在加載的問題及解決

    IDEA創(chuàng)建Maven項(xiàng)目一直顯示正在加載的問題及解決

    這篇文章主要介紹了IDEA創(chuàng)建Maven項(xiàng)目一直顯示正在加載的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 基于@RequestParam注解之Spring MVC參數(shù)綁定的利器

    基于@RequestParam注解之Spring MVC參數(shù)綁定的利器

    這篇文章主要介紹了基于@RequestParam注解之Spring MVC參數(shù)綁定的利器,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Spring?Security登錄表單配置示例詳解

    Spring?Security登錄表單配置示例詳解

    這篇文章主要介紹了Spring?Security登錄表單配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Spring @Retryable注解輕松搞定循環(huán)重試功能

    Spring @Retryable注解輕松搞定循環(huán)重試功能

    spring系列的spring-retry是另一個(gè)實(shí)用程序模塊,可以幫助我們以標(biāo)準(zhǔn)方式處理任何特定操作的重試。在spring-retry中,所有配置都是基于簡單注釋的。本文主要介紹了Spring@Retryable注解如何輕松搞定循環(huán)重試功能,有需要的朋友可以參考一下
    2023-04-04

最新評(píng)論