Spring Cloud Bus自动刷新配置

461 阅读1分钟

我们在测试拿到的配置文件的内容的时候,写了这样的Controller,现在需要新加一个@RefreshScope注解,其实就是声明了配置自动更新的生效范围,所以需要加上@RefreshScope注解:

@RestController
@RequestMapping("/env")
@RefreshScope
public class EnvController {

    @Value("${env}")
    private String env;

    @GetMapping("print")
    public String printEnv(){
        return env;
    }
}

但是通常不这样使用,我们往往是把配置集中到一起,然后在配置类上面声明,假设现在Git仓库的shop-dev.yml配置如下:

server:
  port: 8090

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8762/eureka/

spring:
  application:
    name: shop
  rabbitmq:
    host: 192.168.79.128
    port: 5672
    username: guest
    password: guest
env: dev

boy:
  name: Tim
  age: 18

于是在config目录下新建一个JavaBean,叫做Boy,这时对这个Boy加上@RefreshScope:

package xpu.edu.shop_service.config;

@Data
@Component
@ConfigurationProperties(prefix = "boy")
@RefreshScope
public class Boy {
    private String name;
    private int age;
}

此时Controller修改为如下:

@RestController
@RequestMapping("/env")
public class EnvController {
    
    @Autowired
    private Boy boy;

    @GetMapping("print")
    public String printEnv(){
        return "name:" + boy.getName() + " age:" + boy.getAge();
    }
}

通过手动访问/actuator/bus-refresh 接口,已经实现了刷新,如下图所示:

mark

现在自动刷新就只差一步了,那就是配置Git的WebHook,只要发生更新或者是其他事件,Git托管平台便会自动访问我们的/actuator/bus-refresh 接口,从而自动刷新配置文件就完成了!

mark