gpt4 book ai didi

spring-boot - Spring Cloud Refresh 事件无法识别已删除的属性?

转载 作者:行者123 更新时间:2023-12-01 13:42:20 29 4
gpt4 key购买 nike

背景:

我有一个使用 Spring Cloud 运行的 Spring Boot 1.4 应用程序。我的应用程序正在使用 native 配置文件从外部 config.properties 文件中提取设置。配置服务器嵌入在同一个应用程序中。

在 config.properties 文件中,我添加了以下设置:

app.setting=helloworld

什么有效:

当我更改属性并发送 REFRESH 事件时,标记的相关 bean 被重新加载并且更改被正确识别。

什么不起作用:

如果我实际上从 config.properties 中删除了该属性(例如通过将其注释掉),则 REFRESH 事件实际上不会刷新应用程序。 Spring Cloud 似乎无法识别属性被删除的事实,当数据绑定(bind)器继续更新世界状态时,它错过了属性被删除的事实,并且链接到它的相应 bean 也必须刷新并且它的字段设置为空白/空等。

看起来数据绑定(bind)器只查看配置中当前可用的内容,而不保留 的记录。什么是与什么是 .

在 bean 配置状态中实际禁用该设置的唯一方法不是删除它,而是将其设置为一个空白值(这是一个新值,因为该设置只是一个字符串)。请注意,映射到此属性的 Java bean 中的字段除了 null 之外没有默认值,并且该值未在其他任何地方定义(如在嵌入式 application.properties 文件中等)
  • 我可能会错过什么?
  • 这是一个功能吗?漏洞?

  • 谢谢你的时间。

    最佳答案

    不确定这是否适用于您,但我在使用 @ConfigurationProperties 注释的 bean 时遇到了类似的问题。并使用 @EnableAutoConfiguration 注册:

    @ConfigurationProperties(prefix="example")
    @RefreshScope
    public class MyConfig {
    private List<String> values;
    }

    @EnableAutoConfiguration(MyConfig.class)
    public class ApplicationConfiguration {
    }

    我遇到的问题是当你有一个 YAML 配置时:
    example:
    - Some
    - Values
    - Here

    从列表中删除项目并没有将它们从 MyConfig.values 中删除当上下文被刷新时。

    原因是注册 MyConfig使用 @EnableAutoConfiguration不允许您更改 bean 的范围,这意味着刷新上下文时不会重新创建 bean。见 Github Issue .

    我的修复

    我删除了 MyConfig来自 @EnableAutoConfiguration并明确添加了 @Component注解:
    @Component
    @ConfigurationProperties(prefix="example")
    @RefreshScope
    public class MyConfig {
    private List<String> values;
    }

    @EnableAutoConfiguration
    public class ApplicationConfiguration {
    }

    在此之后,从 YAML 列表中删除项目会反射(reflect)在 MyConfig 中。当上下文被刷新时。

    关于spring-boot - Spring Cloud Refresh 事件无法识别已删除的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38932168/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com