nacos map及listmap 配置项bind bug

阅读: 评论:0

nacos map及listmap 配置项bind bug

nacos map及listmap 配置项bind bug

nacos spring boot 0.2.3 支持了配置list及listmap 属性(configuration),在sample中也带了一个例子,示意yaml文件如下

--- 
list: - "Boston Red Soxe"- "Detroit Tigers"- "New York Yankees"
listMap: l1: "New York Mets"l2: "Chicago Cubs"

但此处有bug,nacos是通过Spring 的RelaxedDataBinder binder = new RelaxedDataBinder(bean, properties.prefix()); 来实现的,RelaxedDataBinder 默认在更新的时候是使用update原有内容来实现,因此当list item数量比原有少,或者map 的key与原有不同,旧数据会保留

解决办法是修改public class NacosBootConfigurationPropertiesBinder的doBind函数,在
binder.bind(new MutablePropertyValues(prop));
前加入 ObjectUtils.cleanMapOrCollectionField(bean);

另外根据应用需要考虑加入同步执行机制,如果更新不频繁,可以简单使用synchronized。

@Overrideprotected void doBind(Object bean, String beanName, String dataId, String groupId,NacosConfigurationProperties properties, String content, ConfigService configService) {String configType = properties.yaml() ? Type() : pe().getType();Properties prop = toProperties(dataId, groupId, content, configType);RelaxedDataBinder binder = new RelaxedDataBinder(bean, properties.prefix());MutablePropertyValues mut = new MutablePropertyValues(prop);synchronized(bean) {ObjectUtils.cleanMapOrCollectionField(bean);binder.bind(mut);}publishBoundEvent(bean, beanName, dataId, groupId, properties, content, configService);publishMetadataEvent(bean, beanName, dataId, groupId, properties);}

本文发布于:2024-02-02 16:24:30,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170686226844996.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:map   nacos   listmap   bug   bind
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23