我们在测试拿到的配置文件的内容的时候,写了这样的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 接口,已经实现了刷新,如下图所示:
现在自动刷新就只差一步了,那就是配置Git的WebHook,只要发生更新或者是其他事件,Git托管平台便会自动访问我们的/actuator/bus-refresh 接口,从而自动刷新配置文件就完成了!