具有相同实体和回购协议的多个数据源

Multiple Data Sources with same entity and repo

目前正在处理我的 Spring 引导项目需要的项目 在同一数据库服务器中利用多个数据源或模式。我有 在中找到了几个教多数据源配置的教程 spring 启动,其中实体 foo 存在于 DataSource A 中,bar 存在于 下面是DataSource B.,

https://scattercode.co.uk/2016/01/05/multiple-databases-with-spring-boot- 和-spring-data-jpa/ https://scattercode.co.uk/2013/11/18/spring-data-multiple-databases/ https://medium.com/@joeclever/using-multiple-datasources-with-spring-boot-and-spring-data-6430b00c02e7

但我的用例是实体 foo 和 bar 存在于多个模式中,我想使用单个实体和存储库来访问所有 schema.Data 未在所有 schema.It 中复制其中。

因此,如果我需要搜索用户 John Doe,我必须通过架构 1 和 如果找不到他,请转到下一个模式。

我已经尝试了以上所有教程(尽管它们与我的不一致 用例),希望我能破解它,让它像 概念证明。 我也研究过 AbstractRoutingDataSource (http://fizzylogic.nl/2016/01/24/make-your-spring-boot-application-multi-tenant-aware-in-2-steps/ , http://kimrudolph.de/blog/spring-datasource-routing) 和 MultiTentancy,但这两者都谈论访问单个 任何时间点的模式。 我只需要一些指导或 link 来遵循并完成此任务。

提前致谢。

您需要查看 AbstractRoutingDataSource 并使用它。

So if I need to search for User John Doe I have to go through Schema 1 and if I don't find him, move onto the next schema.

因此您需要在第一个模式中搜索,如果没有找到,则继续下一个模式。

在上面给出的例子中link,

 CustomerContextHolder.setCustomerType(CustomerType.GOLD);
 List<Item> items = catalog.getItems();
 if(isEmpty(goldItems)){
  CustomerContextHolder.setCustomerType(CustomerType.SILVER);
  items = catalog.getItems();  
 }

可以找到更多详细信息in another qn here

使用 https://github.com/wmeints/spring-multi-tenant-demo 设法解决了问题。

感谢@surya 的推荐。