我有一个spring-boot申请。在运行文件夹下,还有一个附加的配置文件:
spring-boot
dir/config/application.properties
应用程序启动时,它将使用文件中的值并将其注入到:
@Value("${my.property}") private String prop;
问题:如何触发这些@Value属性的重新加载?我希望能够application.properties在运行时更改配置,并@Value更新字段(也许可以通过/reload在应用程序内部调用servlet 触发更新)。
@Value
application.properties
/reload
但是如何?
使用下面的bean每1秒重新加载config.properties。
@Component public class PropertyLoader { @Autowired private StandardEnvironment environment; @Scheduled(fixedRate=1000) public void reload() throws IOException { MutablePropertySources propertySources = environment.getPropertySources(); PropertySource<?> resourcePropertySource = propertySources.get("class path resource [config.properties]"); Properties properties = new Properties(); InputStream inputStream = getClass().getResourceAsStream("/config.properties"); properties.load(inputStream); inputStream.close(); propertySources.replace("class path resource [config.properties]", new PropertiesPropertySource("class path resource [config.properties]", properties)); } }
你的主要配置如下所示:
@EnableScheduling @PropertySource("classpath:/config.properties") public class HelloWorldConfig { }
而不是使用@Value,每次你想要使用的最新属性
environment.get("my.property");
注意
尽管示例中的config.properties是从类路径中获取的,但是它仍然可以是已添加到类路径中的外部文件。