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

13

到目前为止,我看到过几种更新Spring Boot应用程序的方法。一种是更改属性文件本身,然后重新加载文件;另一种是使用@RefreshScope注解或Spring Cloud Config。

我没有找到类似于getEnvironment().updateProperty(key, value)这样直接的方法。

是否有这样的方法?举个例子,我需要更改应用程序的日志类型以显示SQL;我的application.properties文件包含以下行:spring.jpa.show-sql=false

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

您能否提供更简单的方法来实现此操作?和/或展示如何针对该特定属性进行操作的示例?

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


2
没有这种情况。属性是在加载时应用的…更改它们需要重新启动或重新创建bean(因此使用@RefreshScope)。您可能能够使用JMX更改正在运行的应用程序中的某些属性,但这不会反映在您的application.properties中。 - M. Deinum
是的,谢谢,这些属性不需要在属性文件中反映出来。它们只需要应用于当前运行的实例即可。 - Wilhelm Sorban
2
你可以使用Spring-Boot Cloud来实现。请参考https://dev59.com/mbnqs4cB2Jgan1znMXaf。 - gtonic
@gtonic 如果可能的话,我想看到针对我帖子中描述的属性的具体示例,尽可能保持简单。 - Wilhelm Sorban
我已经使用这个答案完成了这个任务。 - Essex Boy
显示剩余6条评论
3个回答

1
你可以像下面这样使用kubernetes env
spec:
  containers:
  - name: envar-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    env:
    - name: SPRING_PROFILES_ACTIVE
      value: "prod"

如果不使用Kubernetes,你可以使用数据库(我更喜欢NoSql)来更改你的属性。 编写代码以从数据库中获取数据并更新你的属性。

0

0
如果一个应用程序对其可用性有特殊要求,可能希望在不需要重新启动的情况下更改配置文件。应用程序应自动检测此类更改并相应地做出反应。这个功能称为自动重载。
Apache Commons Configuration库定义了重载机制,它有多个组件可以用于这种方法。您可以在此链接中了解如何使用它https://commons.apache.org/proper/commons-configuration/userguide/howto_reloading.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接