【问题标题】:Spring how to reload the values from application.properties at runtimeSpring如何在运行时从application.properties重新加载值
【发布时间】:2013-02-22 20:23:18
【问题描述】:

在我的 Spring 应用程序中,我从应用程序外部加载 application.properties 文件,例如/user/home/properties/application.properties。文件中的值是通过 bean 中的 @Value 注解注入的。我的新要求是能够更改 application.properties 文件中的值并重新加载(或重新注入)bean 中的新值。

在 Spring 3.2 中可以实现这样的事情吗?

【问题讨论】:

标签: java spring spring-mvc dependency-injection


【解决方案1】:

在主类中的独立 spring 应用程序中,您可以执行以下操作:

 //load the appcontext with refresh value as false
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                    new String[] { "classpath:appcontext.xml" }, false);
//add the props file
context.getEnvironment().getPropertySources().addFirst(new ResourcePropertySource("classpath:app.properties"));
//refresh the context
context.refresh();

这样做是使用在 appcontext.xml 文件中调用的所有属性中定义的属性加载 spring 上下文,但在加载时不会刷新。然后它说首先加载 app.properties。那时只考虑 app.properties 中的值。然后刷新上下文。现在 app.properties 文件中的属性值已加载。有了这个,您不需要重新构建应用程序,您只需更改值并重新启动应用程序

【讨论】:

  • 这种方法的问题是,每次我在 application.properties 文件中进行更改时,我都必须重新启动应用程序。我正在寻找的解决方案是 - 能够在运行时从 application.properties 文件中刷新/重新加载新值,而无需重新启动应用程序。
  • 这可能会有所帮助 - morgan-design.com/2012/08/…
【解决方案2】:

应用程序上下文启动后,您无法重新加载 application.properties 中的属性,除非 java 进程已关闭并且您需要再次构建和运行。理想的选择是使用会话或缓存或任何事件驱动的消息传递框架,如 Kafka。这完全取决于您的要求和您能够使用的框架。

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2016-05-24
    • 2012-01-30
    • 2021-12-10
    • 1970-01-01
    • 2015-11-27
    • 2013-08-28
    • 2016-03-04
    • 2020-09-07
    相关资源
    最近更新 更多