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