当前位置: 首页 > 面试题库 >

如何在Spring中从application.properties重新加载@Value属性?

司马英才
2023-03-14
问题内容

我有一个spring-boot申请。在运行文件夹下,还有一个附加的配置文件:

dir/config/application.properties

应用程序启动时,它将使用文件中的值并将其注入到:

@Value("${my.property}")
private String prop;

问题:如何触发这些@Value属性的重新加载?我希望能够application.properties在运行时更改配置,并@Value更新字段(也许可以通过/reload在应用程序内部调用servlet 触发更新)。

但是如何?


问题答案:

使用下面的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是从类路径中获取的,但是它仍然可以是已添加到类路径中的外部文件。



 类似资料:
  • 问题内容: 我在Spring 3中使用属性文件。当Spring初始化其contex时,它将加载属性文件,并将其放入带有@Value批注的所有bean中。 我希望有可能更新文件中的某些属性,并在服务器上公开一个JMX,该JMX将新属性重新加载到Spring中-无需重新启动服务器并重新加载其上下文。 我可以通过使用一些 Spring方法 来重新加载属性并将其填充到所有bean中来实现此功能,还是应该自

  • 对于spring framework,我想手动重新加载属性文件中的数据。实际上,当我手动运行这个servlet文件时,我必须编写一个重新加载servlet来手动重新加载数据。 我已经为MessageSource定义了Spring配置。 但不希望在特定时间段自动加载,例如,设置时可以自动加载: 我以前尝试过clear缓存(),但没有自动加载。

  • 在Spring Boot中,有一个属性文件application.property,与这个属性一起,我创建了一个额外的属性文件,名为MyOwnProp.properties。 如何在中加载?表示如何在Application.properties中包含另一个命名属性? 有什么进展吗?

  • 问题内容: 我有一个简单的应用程序,其中我使用几个属性文件来获取其他用户编辑的内容(指向网站的链接等)。 我加载属性的类如下所示: 一些属性文件: 这可以正常工作,但是如果我对properties-file进行更改,则必须重新加载应用程序以可视化所做的任何更改。 如果我将位置移动到磁盘而不是类路径,是否可以定期或手动重新加载?我不希望更改时自动完成此操作,因为我想控制何时完成/更新。 问题答案:

  • 我想在spring boot web Project中使用来自Application.Properties的@Value注释获取值。我认为我可以使用@value注释,因为我认为application.properties中的变量是动态加载的。但是当我只写@value注释时,它就不起作用了。 我在申请中有一个属性。poperties 我如何解决这个问题??