在SpringBoot OpenJPA应用程序中动态创建数据源(使用OpenJPA实现多租户)

时间:2017-04-21 13:17:01

标签: postgresql spring-boot datasource multi-tenant openjpa

我正在使用OpenJPA创建一个Springboot应用程序。

我的要求是我需要动态连接到多个数据源,并且通过调用一些休息端点在运行时获取数据源凭据。

这是控制器类:

@RestController
public class StationController {

@Autowired
BasicDataSource dataSource;

我有一个服务,根据客户名称返回jdbc_url:

public String getDSInfo(String customername){
    // code to get the datasource info (JDBC URL)
} 

我的问题是:

  1. 有没有办法在运行时通过调用其他服务(获取客户ID并返回客户特定数据源)获取数据源凭据来创建数据源?

  2. 由于我的应用程序是基于Web的应用程序,许多客户将同时访问它,那么如何创建和处理这么多不同的数据源呢?

  3. 注意:

    1. 代码只能通过在运行时触发某些服务来获取有关客户特定数据源的信息,因此我无法在XML配置文件中对数据源凭据进行硬编码。

    2. 我发现了一些使用Hibernate的实现,但我使用Springboot和OpenJPA。因此需要OpenJPA特定的帮助。

1 个答案:

答案 0 :(得分:0)

听起来你想要一个多租户解决方案。

数据源很容易以编程方式创建,只需使用DataSourceBuilder,从中央源(例如中央配置数据库或Spring Config Server)引入连接详细信息。

然后,您需要查看多租户框架,将数据源绑定回客户端。

见这里:

https://www.youtube.com/watch?v=nBSHiUTHjWA

在这里

https://dzone.com/articles/multi-tenancy-using-jpa-spring-and-hibernate-part

视频是长手表,但很好看。基本上,您有一个客户数据源(来自内存)的映射,允许实体管理器通过使用“客户”的线程范围自定义弹簧范围从地图中获取数据源,该范围是在特定客户的用户以某种方式登录时设置的你的应用。