在nacso中配置了关于DruidDataSource的配置如下:
在spring项目的bootstrap.yml中配置如下:
在项目中编写手动注入DruidDataSource的代码如下:
启动项目后,再nacos中更改druid的url参数,但是在IDEA的控制台却没有打印
于是我去查看spring.cloud.nacos.config.shared-configs的源码,发现shared-configs的参数是个接收NacosConfigProperties.Config的数组,然后再查看Config类
原来如此,就是说我们给shared-config传入的config对象参数只有dataId,而另外两个值是读取的默认值,最最重要的事refresh的默认值是false,false表示默认是不支持动态刷新的,因此,bootstrap的配置要改变一下
并且要在创建DataSource的配置类中加上@RefreshScope注解
方法上也要加@RefreshScope,而且还要加@Primary
加在类上面的@RefreshScope会监听配置中心文件中关于DataSource的参数变化,修改则实现刷新,而加在方法上的@RefreshScope会刷新spring容器中的DataSource这个Bean。
@Primary注解表示spring会优先IOC此DataSource,使得spring容器能够优先托管自定义的DataSource注入。
一切配置完成后,就能够实现动态刷新DataSource啦,其实不只是修改DataSource的时候要注意,其他任何需要动态修改共享配置文件的时候,都要在bootstrap中填上refresh=false这个条件,不然就会读取默认值。希望此篇文档对你能有帮助,仅供参考,谢谢!