成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

技巧!Spring Boot 動態刷新及實時監控配置文件的變化

開發 架構
在Spring Cloud微服務架構中,配置管理是至關重要的。隨著業務的發展和服務的不斷擴展,配置信息經常需要調整。如何動態地獲取這些變化,使服務能夠實時響應配置的更新,成為了關鍵問題。

環境:SpringBoot2.7.18 + SpringCloud2021.0.7

1. 簡介

在Spring Cloud微服務架構中,配置管理是至關重要的。隨著業務的發展和服務的不斷擴展,配置信息經常需要調整。如何動態地獲取這些變化,使服務能夠實時響應配置的更新,成為了關鍵問題。Spring Cloud提供了多種機制來實現配置的動態更新,使得開發人員能夠輕松地管理和應用這些變化。

本篇文章不會結合Nacos講解,將通過其它的方式手動的刷新配置及監聽配置文件的變化。

2. 實戰案例

2.1 依賴管理

<spring-cloud.version>2021.0.7</spring-cloud.version>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

項目中主要是需要引入spring-cloud-context包,所以你可以根據需要隨便引入openfeign或者loadbalancer相應的包即可,只要環境中存在spring-cloud-context包就行了。本示例引入的是:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter</artifactId>
</dependency>

該依賴中會自動引入commons和context。

2.2 開啟bootstrap配置

要啟動bootstrap配置(也就是默認的bootstrap.yml配置生效)有以下2中方式:

第一種:

引入下面依賴

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

第二種:

啟動應用程序時添加如下參數

-Dspring.cloud.bootstrap.enabled=true

bootstrap.yml配置文件生效關鍵是BootstrapApplicationListener監聽器。

部分代碼

public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
  ConfigurableEnvironment environment = event.getEnvironment();
  if (!bootstrapEnabled(environment) && !useLegacyProcessing(environment)) {
    return;
  }
  // ...
}

推薦第一種方式。

2.3 初始配置

bootstrap.yml配置內容如下

pack:
  name: ooxx

對應的屬性配置類

@Component("pp")
@ConfigurationProperties(prefix = "pack")
public class PackProperties {
  private String name ;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }  
}

測試接口

@RestController
@RequestMapping("/pack")
public class PackController {
  @Resource(name = "pp")
  private PackProperties props ;
  @GetMapping("")
  public PackProperties p() {
    return props ;
  }
}

圖片圖片

正確顯示配置信息。

如果你修改配置文件pack.name默認情況下是不會有任何變化的。要正確的使得配置文件實時更新,我們可以手動的觸發配置刷新動作。

觸發刷新動作

@Resource
private ContextRefresher contextRefresher ;
@GetMapping("/refresh")
public Object refresh() {
  return this.contextRefresher.refresh() ;
}

通過ContextRefresher#refresh方法會觸發2個核心動作:

  • 重新初始化refresh作用域的bean對象
  • @ConfigurationProperties注解的類(或方法@Bean)會重新初始化觸發EnvironmentChangeEvent事件。

修改配置文件內容如下:

pack:
  name: ooxx

調用上面/refresh接口后,無需重啟服務,配置信息已經動態刷新

圖片圖片


上面的示例是需要對@ConfigurationProperties進行重寫綁定,所以我們可以通過監聽EnvironmentChangeEvent事件在程序中監聽配置的變化。

@Component
public class PackApplicationEventListener implements ApplicationListener<EnvironmentChangeEvent> {


  @Resource
  private Environment env ;


  @Override
  public void onApplicationEvent(EnvironmentChangeEvent event) {
    System.out.println(event.getKeys()) ;
    System.out.println(env.getProperty("pack.name")) ;
  }
}

當配置發生變化后,上面的監聽程序將被觸發。

控制臺輸出

[pack.name]
xxxooo
責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2011-04-12 09:53:32

Spring

2023-07-27 08:53:44

2021-09-30 06:31:12

Spring Boot配置密碼

2024-04-23 14:13:38

開發配置文件

2009-06-17 14:10:30

Spring配置文件

2022-06-23 08:42:08

配置加密解密

2023-11-01 08:30:20

SpringYAML

2021-11-07 14:00:16

JekyllBashAPI后端

2009-11-27 08:59:29

VS2003配置文件

2009-12-21 11:19:50

WCF配置文件

2010-02-23 14:17:20

WCF配置文件

2009-06-24 08:57:14

InittabLinux配置

2023-10-18 08:12:34

Spring自動配置

2022-11-16 10:39:30

Spring配置文件生效

2024-06-06 08:06:37

2024-10-10 15:08:40

2010-01-08 16:55:04

Ubuntu vim

2023-04-10 11:41:15

2022-05-18 08:32:05

服務監控Prometheus開源

2010-02-24 14:10:54

WCF修改App.co
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美 日韩 国产 成人 | 久久久久国产精品一区三寸 | 一区天堂 | 亚洲福利在线观看 | 九七午夜剧场福利写真 | 国产高清免费 | 红色av社区 | 亚洲一区二区三区视频 | 欧美一页 | 本地毛片 | 国产在线一区观看 | 日日操操操 | 欧美精品网站 | 北条麻妃一区二区三区在线视频 | 天天久久 | 日日干日日操 | 国产原创在线观看 | 正在播放国产精品 | 久久99精品久久久久久狂牛 | 久久久久久久综合 | 午夜激情国产 | 亚洲一卡二卡 | 欧美激情视频一区二区三区免费 | 国产一二区视频 | 视频1区2区 | 久久久久久久夜 | 亚洲综合三区 | 国产日韩精品一区二区 | 99精品欧美一区二区蜜桃免费 | 亚洲天堂一区二区 | 国产精品久久久久久久久久东京 | 日本精品一区二区三区四区 | 欧美一区二区免费 | www.一区二区三区.com | 在线中文字幕av | 成人精品视频在线观看 | 国产玖玖 | 欧美a在线 | 国产成人精品一区 | 久久蜜桃资源一区二区老牛 | 久操伊人 |