在用spring cloud server时,发现我不用RefreshScope标签也能动态刷新

爱吃大肉包 发布于 2017/10/20 18:52
阅读 5K+
收藏 0

为啥我没用@RefreshScope也能接收到bus的指令进行刷

 

 

@Component
@ConfigurationProperties

public class Mapping {

属性.. 

}

 

没有@RefreshScope ,竟然也能动态刷新

 

加载中
0
Mark哥是我
Mark哥是我

刚好看到,你应该刷新的只是字段,如果是bean应用,那么就不行了!

比如说 bean里面有个字段是 name,程序启动后,并修改了对应的配置,你通过bean获取就不行了!

0
热心市民小王-

我把数据库链接改了 重新提交 然后也变了 为什么

爱吃大肉包
爱吃大肉包
因为这个只是改变spring context里的信息而已, 要重连还是得自己去监听事件进行改变
0
BoomMan
BoomMan

原因是spring.cloud 默认有新增了ConfigurationPropertiesRebinder类,它监听了EnvironmentChangeEvent事件,它在发生EnvironmentChange事件后,会重新构造原来的加了@ConfigurationProperties注解的Bean对象。这个是Spring Cloud的默认实现.

/**
 * Listens for {@link EnvironmentChangeEvent} and rebinds beans that were bound to the
 * {@link Environment} using {@link ConfigurationProperties
 * <code>@ConfigurationProperties</code>}. When these beans are re-bound and
 * re-initialized the changes are available immediately to any component that is using the
 * <code>@ConfigurationProperties</code> bean.
 *
 * @see RefreshScope for a deeper and optionally more focused refresh of bean components
 *
 * @author Dave Syer
 *
 */
返回顶部
顶部