在使用Spring Boot的项目中,我们使用application.properties,但需要根据外部配置配置其中一些属性(如日志级别的端口号).我们通过API访问配置,因此仅在运行时才知道.
有没有办法在运行时覆盖或设置一些Spring属性(例如使用bean),如果是,如何实现?
我正在使用Spring 3的属性文件.当Spring初始化它的上下文时,它会加载属性文件并将其放在所有带有@Value注释的bean中.
我希望有可能更新文件中的某些属性,并在服务器上公开JMX,将新属性重新加载到Spring - 无需重新启动服务器,并重新加载其上下文.
我可以通过使用一些Spring方法重新加载属性并将它们填充到所有bean来实现它,或者我应该自己写这样的东西吗?
我想到了许多内部解决方案.就像在数据库中拥有属性并每隔N秒轮询它一样.然后还要检查.properties文件的时间戳修改并重新加载它.
但我正在研究Java EE标准和Spring引导文档,我似乎无法找到一些最好的方法.
我需要我的应用程序来读取属性文件(或环境变量或数据库参数),然后才能重新读取它们.生产中使用的最佳实践是什么?
一个正确的答案至少可以解决一个场景(Spring Boot或Java EE)并提供一个关于如何使其在另一个场景上工作的概念线索
到目前为止,我已经看到了通过更改属性文件本身,然后重新加载文件,使用@RefreshScope注释或使用Spring Cloud Config 来更新Spring Boot应用程序的方法。
我无法直接找到任何内容(例如getEnvironment().updateProperty(key, value))。
有这种方法吗?
例如,我需要更改应用程序的日志记录类型以显示SQL。我的application.properties文件包含以下行:spring.jpa.show-sql=false。
但是,如果我想true通过REST调用在应用程序运行时将此设置为?
您能建议一种更简单的方法吗?和/或显示有关此特定属性的示例,您将自己如何做?
编辑:更改不需要反映在application.properties文件中。因此,当应用程序重新启动时,它将使用application.properties文件中最初设置的属性。