spring-cloud 配置中心无法删除map中的键值对,如何解决

waterDoge
  • 1.3k

配置类

@ConfigurationProperties(prefix = "test")
public class TestProperties {
    private Map<String, String> map;

    public Map<String, String> getMap() {
        return map;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }
}

配置中心使用的是nacos
先添加配置

test:
  map:
    a: b

发布后map被更新成{"a": "b"}
然后把配置更改成

test:
  map:
    c: d

发布后map变成了{"a": "b", "c": "d"}

原先的a->b映射没有删掉
把映射关系变成字符串自行解析是可以解决的,
想知道在不改变配置结构的情况下有没有什么方法解决这个问题

回复
阅读 1.8k
1 个回答
✓ 已被采纳

监听org.springframework.cloud.endpoint.event.RefreshEvent事件,在事件回调中清空map, 并设置为较高优先级保证清空操作在刷新前执行

@Component
public class BidConfigCleanup implements ApplicationListener<RefreshEvent>, Ordered {
    @Autowired
    private TestProperties properties;

    @Override
    public void onApplicationEvent(RefreshEvent event) {
        properties.setMap(emptyMap());
    }

    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE;
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏