我正在使用 Spring 2.5.6。我有一个 bean,其属性是通过PropertyPlaceholderConfigurer从属性文件分配的。我想知道是否可以在修改属性文件时更新 bean 的属性。例如,将有一些定期过程检查属性文件的最后修改日期,如果它已更改,则重新加载 bean。
我想知道是否已经有一些东西可以满足我的要求。如果不是,解决这个问题的最佳方法是什么?
谢谢你的帮助。
我正在使用 Spring 2.5.6。我有一个 bean,其属性是通过PropertyPlaceholderConfigurer从属性文件分配的。我想知道是否可以在修改属性文件时更新 bean 的属性。例如,将有一些定期过程检查属性文件的最后修改日期,如果它已更改,则重新加载 bean。
我想知道是否已经有一些东西可以满足我的要求。如果不是,解决这个问题的最佳方法是什么?
谢谢你的帮助。
可能还会考虑使用 Spring 的 PropertyOverrideConfigurer。可以重新读取属性并将其重新应用到一些轮询/调度 bean 中。
它确实取决于实际配置的 bean 如何使用这些属性。例如,他们可能会间接地将它们缓存在自己的某个地方。
如果您想要在运行时动态属性,也许另一种方法是 JMX。
一种方法是在您的应用程序中嵌入一个 groovy 控制台。这里有一些说明。顺便说一句,它们做起来很简单——尽管我对 groovy 不太熟悉,但我只花了很少的时间。
完成此操作后,您可以简单地进入控制台并动态更改实时应用程序中的值。
您可能会尝试为 bean 使用自定义范围,以便在更改属性文件时重新创建 bean。在这里查看我更广泛的答案。
春天云配置具有通过 Spring Cloud Bus 和使用 Cloud Config Server 在运行时更改配置属性的功能。配置或 .properties 或 .yml 文件是从 Spring 应用程序“外部化”的,而是从应用程序在启动时连接到的 Spring Cloud Config Server 检索。该云配置服务器从 GIT 存储库中检索适当的配置 .properties 或 .yml 文件(还有其他存储解决方案,但 GIT 是最常见的)。然后,您可以在运行时通过更改 GIT 存储库的配置文件的内容来更改配置——Cloud Config Server 通过 Spring Cloud Bus 将更改广播到任何客户端 Spring 应用程序,并且这些应用程序的配置会更新,而无需重新启动应用程序。你可以在这里找到一个简单的例子:https://github.com/ldojo/spring-cloud-config-examples