spring cloud 配置文件热加载--@RefreshScope

spring cloud项目中,如果想要使配置文件中的配置修改后不用重启项目即生效,可以使用@RefreshScope配置来实现

 

1、添加Maven依赖

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

2、在配置类上加@RefreshScope注解,引入配置@Value

 
@Component
@RefreshScope
public class OtherConfig {
    /**是否需要保存切图*/
    @Value("${is.cut.save:false}")
    private String isCutSave;
 
    /**保存切图位置*/
    private static String cutSavePath;
 
    /** 静态字段赋值 */
    @Value("${cut.save.path:/server/files}")
    public void setCutSavePath(String cutSavePath) {
        OtherConfig.cutSavePath = cutSavePath;
    }
 
    public String getCutSavePath() {
        return cutSavePath;
    }
 
    public String getIsCutSave() {
        return isCutSave;
    }
 
    public void setIsCutSave(String isCutSave) {
        this.isCutSave = isCutSave;
    }
}

 

 tips:1.@Value给静态变量赋值,不能直接写在变量上,应该放在变量的set()方法上,且该方法不能被static修饰。其中需要在类上加入@Component注解。

     2.通过@Value(“${xxxx}”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@Value("${xxxx:yyyy}")

 

3、配置文件

 
# 动态刷新配置--忽略权限拦截
management.security.enabled=false
 
# 是否需要保存切图
is.cut.save=false
 
# 保存切图位置
cut.save.path=/server/files

4、如果采用了consul配置中心:bootstrap.properties新增配置项

spring.cloud.consul.config.watch.enabled=true

项目启动后,更改注册中心配置,等待大约一秒后配置即可生效

 

5.1、如果采用的是本地配置文件:发送刷新请求

curl -X POST http://localhost:8080/refresh

management.security.enabled配置为false后,项目启动时可以在启动日志中发现下行日志,表明/refresh请求可用。我们修改配置文件后,调用该请求即可通知服务刷新配置,配置就生效了,无需重启项目。

 

5.2、在Spring Boot升级到2.0.3.RELEASE后需新增配置,此时刷新配置文件url为:http://localhost:8080/actuator/refres

management.endpoints.web.exposure.include=refresh

参考资料:

1.Spring Cloud Consul实时动态更新配置:https://blog.csdn.net/fomeiherz/article/details/103525020?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242

2.Spring Cloud Config 实现配置中心,看这一篇就够了:https://www.cnblogs.com/fengzheng/p/11242128.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章