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
时,它成功地工作(读取属性)