spring cloud

启动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或码云上做配置即可:

以码云为例:

到此就可以实现,配置的自动刷新

原文地址:https://www.cnblogs.com/chenglc/p/10150352.html