最近使用Nacos的一些问题
Nacos是什么这里就不做过多介绍了,可以看看我之前的文章:
最近一个新的产品在使用Nacos做注册中心和配置中心,在使用的过程中也发生了一些小问题,在此记录下。
使用版本:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.2</version>
</dependency>
配置不刷新
比如我们在启动类上通过@NacosPropertySource指定了dataId,然后也配置了自动刷新,配置如下:
@NacosPropertySource(dataId = "application", autoRefreshed = true, type = ConfigType.YAML)
在具体使用的时候也没太去注意,直接就用了@NacosValue去获取对应的配置内容。刚开始没注意到说在后台改了配置,应用中居然没生效,后面是因为需要修改一个配置内容,发现改了之后没效果,才发现这个问题。
解决也非常简单,在@NacosValue中也将autoRefreshed设置为true就可以了,默认值是false。也就是说@NacosPropertySource和@NacosValue中都要配置才行。
我个人感觉这个不是很方便,大部分人都会认为@NacosPropertySource设置了应该就是这个对应的dataId里面的都可以自动刷新,最重要的是自动刷新是配置中心
还有就是推荐大家都用@Value的方式进行配置的注入,这样做的好处在于当配置中心切换成其他的,比如Apollo的时候,不用改任何代码,如果用的是@NacosValue的话,那么就得改代码了。
但是@Value的弊端在Spring Boot中目前是无法动态更新的,只能依赖@RefreshScope才可以,但@RefreshScope这玩意是Spring Cloud中的,如果你没用Spring Cloud就尴尬了。。。
不知道有没有其他方式能实现,但在Apollo中@Value是支持动态刷新的,点赞点赞。
日志狂输出
由于Nacos naming模块中输出了很多info级别的日志,刚好项目中也设置了info级别,这个时候就会疯狂输出下面的日志,一天下来99%的日志都是无用的,浪费磁盘....
com.alibaba.nacos.client.naming -227843770 [com.alibaba.nacos.client.
naming.updater] INFO ....
在Nacos的文档中有提到了日志级别的调整,如下图:
如果你用的log4j的换,自己将对应的配置级别调高就行,比如:
<logger name="com.alibaba.nacos.client.naming" additivity="false">
<level value="warn"/>
<appender-ref ref="FileAppender" />
<appender-ref ref="ConsoleAppender" />
</logger>