【问题标题】:How to re-initialize beans in spring without application server restart如何在春季重新初始化bean而不重新启动应用程序服务器
【发布时间】:2014-03-16 16:21:42
【问题描述】:

我正在编程服务,用于从数据库中获取数据并通过 REST 服务提供它们。它使用spring mvc。我的数据库连接配置位于属性文件中,spring 在上下文初始化期间将其作为数据源 bean 加载。

现在我的问题是 - 我想更改属性文件中的配置(例如更改数据库信息),但我无法重新启动应用程序服务器,因此无法加载新配置。

如何重新初始化 spring 上下文或某些特定的 bean,以便使用新定义的属性?

【问题讨论】:

    标签: java spring rest initialization application-server


    【解决方案1】:

    如果你想在 spring 中使用多个数据源,并且需要在运行时动态地决定合适的数据源,你可以使用 spring 提供的AbstractRoutingDataSource 来做到这一点。您必须在方法determineCurrentLookupKey() 中实现用于确定数据源的查找键逻辑。有了这个,您可以在运行时将不同的 bean 映射到不同的数据源。以下是与此上下文相关的几个问题。

    How to programatically change databases in Spring with one DataSource?

    还有

    dynamically change Spring data source

    【讨论】:

    • 谢谢你的回答,但是当我知道只有一个数据源而另一个(或多个)将在运行时通过重写我的 jdbc-properties 文件中的属性来指定时呢?也许我可以使用您提供的链接中的信息来做到这一点,但我看不出如何。
    • 您可以创建某个公共静态变量,该变量在运行时由determineCurrentLookupKey 返回,根据返回值选择您的数据源bean。检查这个例子howtodoinjava.com/2013/12/28/…
    最近更新 更多