具有相同实体和存储库的多个数据源

Ana*_*nth 6 spring multi-tenant spring-data-jpa spring-boot

目前正在开发一个项目,其中我的 Spring Boot 项目需要利用同一数据库服务器中的多个数据源或架构。我发现了几个在 Spring Boot 中教授多个数据源配置的教程,其中实体 foo 存在于数据源 A 中,而 bar 存在于数据源 B 中,如下所示。

https://scattercode.co.uk/2016/01/05/multiple-databases-with-spring-boot- and-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 存在于多个模式中,我想使用单个实体和存储库来访问所有模式。数据不会在所有模式中复制。它是在它们之间划分的。

因此,如果我需要搜索用户 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,但这两者都谈论在任何时间点访问单个模式。我只需要一些指导或链接即可完成此任务。

提前致谢。

sur*_*rya 5

您需要查看 AbstractRoutingDataSource并使用它。

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

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

在上面链接中给出的示例中,

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

更多详细信息可以在另一个 qn 中找到