在应用程序运行时更新 Spring Boot 属性的更好方法

Posted

技术标签:

【中文标题】在应用程序运行时更新 Spring Boot 属性的更好方法【英文标题】:Better way to update Spring Boot properties while app is running 【发布时间】:2018-02-07 00:00:21 【问题描述】:

到目前为止,我已经看到了更新 Spring Boot 应用程序的方法,通过更改属性文件本身,然后重新加载文件,或者使用 @RefreshScope 注释,或者通过 Spring Cloud Config。

我无法直接找到任何内容(例如 getEnvironment().updateProperty(key, value) )。

有这样的方法吗?

例如,我需要更改我的应用程序的日志记录类型,以显示 SQL; 我的application.properties 文件包含这一行:spring.jpa.show-sql=false

但是如果我想在应用程序运行时通过 REST 调用将其设置为 true 怎么办?

您能建议一种更简单的方法吗?和/或展示您将如何为这个特定属性自己做的示例?

编辑:更改不需要反映在application.properties 文件中。因此,当应用程序重新启动时,它将使用最初在 application.properties 文件中设置的属性。

【问题讨论】:

没有。属性在加载时应用...更改它们需要重新启动或重新创建 bean(因此 @RefreshScope)。您也许可以使用 JMX 更改正在运行的应用程序中的某些属性,但这不会反映在您的 application.properties 中。 是的,谢谢,属性不需要反映在属性文件中。它们只需要应用于当前运行的实例。 您可以使用 Spring-Boot Cloud。见***.com/questions/26717187/… refreshing spring boot properties的可能重复 @gtonic 如果可能的话,我想看看我的帖子中描述的属性的具体示例,以使事情尽可能简单。 【参考方案1】:

一些答案​​推荐 Spring Cloud Config Server。对某些人来说,这可能是矫枉过正。这个 SO 答案正是您正在寻找的。 How to hot reload properties in Spring Boot and Java EE

【讨论】:

以上是关于在应用程序运行时更新 Spring Boot 属性的更好方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot JPA CrudRepository 选择性更新 - 只有一些属性

spring boot apollo 热加载 重启

Spring Boot 应用程序无法加载测试属性

如何自行部署 Spring Boot 应用程序

Spring boot 1.4登录外部tomcat

使用属性 server.port=0 运行 spock 测试时如何找到 Spring Boot 容器的端口