Java 如何在运行时更改属性文件和刷新配置类?
我在Java 如何在运行时更改属性文件和刷新配置类?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我在classpath上有properties文件,在java中有configuration class文件,它们映射了这个属性文件。当我更改属性文件时,我也想刷新配置类以获取新值,并且我想不重新启动服务器,有什么解决方案吗?我使用的是springmvc您应该使用@RefreshScope 文件: 标记为@RefreshScope的Spring@Bean将获得特殊的 配置更改时的处理。这是针对 只有注入配置的有状态bean的问题 当它们被初始化时。例如,如果数据源已打开 连接当通过环境更改数据库
classpath
上有properties
文件,在java
中有configuration class
文件,它们映射了这个属性文件。当我更改属性文件时,我也想刷新配置
类
以获取新值,并且我想不重新启动服务器
,有什么解决方案吗?我使用的是springmvc
您应该使用@RefreshScope
文件:
标记为@RefreshScope的Spring@Bean将获得特殊的
配置更改时的处理。这是针对
只有注入配置的有状态bean的问题
当它们被初始化时。例如,如果数据源已打开
连接当通过环境更改数据库URL时,我们
可能希望这些连接的持有者能够完成
他们正在做什么。然后下次有人借用连接时
从池中他得到一个新的URL
RefreshScope是上下文中的一个bean,它有一个公共方法
refreshAll()通过清除目标刷新作用域中的所有bean
隐藏物还有一个刷新(字符串)方法来刷新单个
豆子的名字。此功能在/refresh端点中公开
(通过HTTP或JMX)
然后像这样使用:
@Configuration
@PropertySource("classpath:configprops.properties")
@RefreshScope
public class ConfigProperties {
// previous code
}
我像这样描述了
@Configuration
类@Configuration@PropertySource(“classpath:scheduler.properties”)@RefreshScope公共类AzryConfig{@Value(${fixedDelay.in.millizes}”)私有字符串azryFixed;@Value(${initial.in.millizes})private String azryInitial;//其他getter setter
当我注入这个类时,它无法读取,当我删除@RefreshScope
时,它成功地工作(读取属性)