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

时间:2018-02-07 22:33:02

标签: spring spring-boot spring-data-jpa multi-tenant

目前正在处理我的Spring Boot项目需要的项目 利用同一数据库服务器中的多个数据源或模式。我有 发现了几个教授多个数据源配置的教程 Spring引用,其中实体foo存在于DataSource A中,而bar存在于 DataSource B即下面。,

https://scattercode.co.uk/2016/01/05/multiple-databases-with-spring-boot- 和弹簧数据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,我必须通过Schema 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,但这两个谈论有权访问单一 任何时间点的架构。 我只需要一些指导或链接即可完成。

提前致谢。

2 个答案:

答案 0 :(得分:3)

您需要查看AbstractRoutingDataSource并使用它。

  

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

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

在上面链接中给出的那个例子中,

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

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

答案 1 :(得分:1)

管理以使用https://github.com/wmeints/spring-multi-tenant-demo解决问题。

感谢@surya的推荐。