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小时内删除。
留言与评论(共有 0 条评论) |