当前位置: 首页 > 知识库问答 >
问题:

在飞行中改变春豆的特性

法镜
2023-03-14

我遇到了以下问题。2 dbs有2个数据源:当前(A)和备用(B)。如果A没有响应,我将尝试连接B。

这就是我如何回应的。

  • 侦听器检查连接是否损坏

数据源是Spring bean。所以我即时更改Spring bean属性。可以吗?查看代码:

@Autowired
@Qualifier("dataSourceMain")
private oracle.jdbc.pool.OracleDataSource dsMain;

@Autowired
@Qualifier("dataSourceStandBy")
private oracle.jdbc.pool.OracleDataSource dsStandBy;

public void swapURL() {
    try {
        String dsMainURL = dsMain.getURL();
        dsMain.setURL(dsStandBy.getURL());
        dsStandBy.setURL(dsMainURL);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

正如我所见,我的代码可以工作,但我不知道这是不是一个好方法。

共有2个答案

臧增
2023-03-14

如果您的数据源是池化的,那么它们将有一个连接池等待使用或重用。根据您的池化策略,您的代码可能没有效果,因为您没有告诉数据源驱逐使用旧URL的现有池化连接。

一般来说,我建议您使用AbstractRoutingDataSource来安全地交换数据源。看这里

如何为AbstractRoutingDataSource安全地频繁切换数据源?

晏树
2023-03-14

你能检查一下这是否解决了你的问题吗?似乎是个类似的问题

动态更改Spring数据源

这似乎是一种更优雅的方式

 类似资料:
  • 问题内容: 更新:添加Maven依赖关系 * 更新:通过添加 Maven依赖关系 解决了该错误* 美好的一天。我有AplicationContext.xml的这一部分 Maven Dep春季和冬眠 但是,当我启动我的应用程序时,它告诉我这个错误 但是我正在使用hibernate4。这是什么魔术?=)我已经尝试过重新部署应用程序,但是结果是一样的 问题答案: 您已经错过了Spring-ORM模块:

  • 我知道这个问题听起来很幼稚,但我对web应用程序中bean的范围感到困惑。我知道,对于每个请求,容器都会生成一个新线程,类似地,对于spring web应用程序,每个请求都会生成一个新线程,那么为什么建议将我的控制器、服务定义为singleton,这些bean的范围不应该是prototype吗,因为每个请求(即线程)都有其自己的控制器实例和要使用的服务。 请开导我。

  • 我有一颗春豆: 在jrxml中: 但这抛出了一个 NullPointerException,因为 customerWrapperCache 是空的。 正确的做法是什么?

  • 在实际应用中,destroy方法的可能示例是什么?为什么一个正在运行的应用程序想要销毁它的bean?如果bean是由spring容器(比如ContextLoaderListener)为web应用程序创建的,那么如何重新创建这些bean,因为容器已经启动了。有没有办法在不重启应用服务器的情况下重启spring IoC容器?

  • 我以前和legacy Spring合作过。我们通过xml配置定义了bean,并手动连接它们。我的团队最终做出了一致的努力来更新注释,并使用Spring Boot而不是Spring MVC的‘传统’方法。

  • Java-Spring-骆驼 我想用服务列表发起骆驼路线。 想做下面的事情,但是< code>from方法似乎不是一个生产者。如何定义动态生产者?