如何使用一个DataSource以编程方式更改Spring中的数据库?

我想看看在Spring中使用一个DataSources的最佳方法是什么,但能够从Java代码中切换数据库? 下面是我的两个DataSource,它们转到相同的数据库服务器但是不同的数据库。

            

我让他们绑定到他们各自的bean,但我正在查看我的遗留代码,用2个独立的bean实现它将非常尴尬。 在需要时,是否有关于如何使用一个DataSource和切换数据库的想法/想法?

您可以通过扩展Sp​​ring的AbstractRoutingDataSource并将现有数据源包装在其中来实现。 查看此文章了解详细信息。 引用文章:

一般的想法是路由DataSource充当中介 – 而’真实’DataSource可以在运行时基于查找键动态确定。

另请参阅关于SO的类似问题:

  1. 使用AbstractRoutingDataSource动态更改数据库架构/目录
  2. 从具有相同持久性单元的多个Db读取?
  3. 如何使用JDBC在spring中创建动态连接(数据源)

有很多方法可以做到这一点。 例如,您可以创建服务类DatasourceSelectorService ,并根据某些输入(例如:配置文件/用户输入),相应地选择datasource's bean。

所有其他需要datasource类都应该通过此DatasourceSelectorService获取它。