spring cloud - config 屬性自動刷新


啟動config-server,啟動成功后就不需要在管了;

在config-client做些修改:

在使用的controller或service的類上加上一個注解@RefreshScope

在pom中加入依賴:

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

至此,准備工作完畢

 

接下來修改配置文件中的屬性值,

無需重啟congif-server,他會自動更新值;

接下來調用config-client的refresh方法,

curl -X POST http://127.0.0.1:9020/refresh

在config-client控制台會有日志刷新,大意思是重新連接config-server,刷新取值;接下來就可以驗證結果,期間無需重啟服務;

 

{
"timestamp": 1545295648687,
"status": 401,
"error": "Unauthorized",
"message": "Full authentication is required to access this resource",
"path": "/refresh"
}

需要加上配置:

 

management.security.enabled: false

 

方法調用成功后,會返回修改的記錄

 

此方法不需要重啟應用服務,可以實現配置的手動刷新,

倘若,一個服務有多個節點,此方法必須要依次刷新服務。

 

配置的批量刷新

借助MQ可以實現一次方法調用,實現整個服務的配置刷新

 

首先安裝或使用已經有的rabbitmq,

安裝rabbitmq:https://www.cnblogs.com/chenglc/p/10154444.html

在應用服務的配置中加上rabbitmq的配置:

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

還需要加入依賴:

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

啟動項目后,控制台的日志輸出會有這樣一行:

2018-12-21 16:05:26.747  INFO 11377 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/bus/refresh],methods=[POST]}" onto public void org.springframework.cloud.bus.endpoint.RefreshBusEndpoint.refresh(java.lang.String)

就是調用此方法:

127.0.0.1:9020/bus/refresh

就可以實現一次性刷新整個服務;

建議:在config-server中加入一樣的配置,每次更新配置文件后,讓config-server來擔任通知方

存在的問題:如果調用127.0.0.1:9020/bus/refresh,此地址來刷新服務,則127.0.0.2:9020,節點也不會做通知,不會更新服務的配置信息

到此,實現了配置的半自動更新;

 

配置的全自動更新

要做到配置信息的自動更新,只差一步,那就是修改配置文件后,自動調用刷新方法

這只需要在github、gitlab或碼雲上做配置即可:

以碼雲為例:

 

 

 

到此就可以實現,配置的自動刷新

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM