Spring JPA 根据请求更改数据源 header

Spring JPA change datasource depending on request header

我用 spring-data-rest 开发了一个应用程序。 我喜欢它,而且它很有魅力。

我想做的(为多个客户实现一个后端)是根据在自定义请求中发送的 apikey 更改我的存储库的数据源 header。

可以从管理所有数据库配置的外部微服务中检索连接信息(url、凭据、数据库)。

想法是在启动时检索所有可用的数据库连接,并将它们存储在以 apikey 为键、连接信息为值的映射中。

我不清楚如何在运行时为每个传入请求更改存储库的数据源。

有什么想法吗?

根据您的 JPA 提供商,您需要的是多租户支持。

对于 Hibernate,有一个很好的 multi-tenancy API available that plugs in with Spring very nicely for configuring what data source to use. MultiTenantConnectionProvider and CurrentTenantIdentifierResolver 用于一些 API 细节。

我终于找到了使用 AbstractRoutingDataSource 的解决方案。 这篇文章挽救了我的一天。一个真正易于使用和理解的解决方案。 http://fizzylogic.nl/2016/01/24/Make-your-Spring-boot-application-multi-tenant-aware-in-2-steps/