在Spring Boot中如何在运行时将数据库与存储在主数据库中的配置连接起来?

时间:2019-09-24 03:21:19

标签: hibernate spring-boot spring-data-jpa jdbctemplate

我有一个主数据库,其中包含不同客户端数据库连接的配置,这是我的要求。当我使用包含JWT的Rest API发布数据时,该令牌将包含客户端名称并基于客户端名称,我必须从主数据库中获取客户端数据库配置并进行数据库连接,然后将数据插入该数据库中。

我遍历了各种帖子,但找不到任何具体示例。

当前,我在项目中将Spring Boot与Data JPA一起使用。如果有人对Spring JDBC模板有任何解决方案,那么我准备将应用程序移入该解决方案。

1 个答案:

答案 0 :(得分:3)

正如@Jonathan Johx提到的多租户应用程序一样,每个租户都有其架构。 为了提供一些具体的指导,您可以创建一个特殊的数据源,该数据源将充当真实数据源的代理,每个数据源可以负责1个模式连接。

Spring已经为此提供了AbstractRoutingDatSource,或者您可以自己滚动。基本上,您应该定义一些映射方法(determineCurrentLookupKey)并维护键到实际数据源的映射,以防在应该连接新数据源的情况下可以实时更新。

我发现This SO post对该方法进行了更深入的说明,因此没有理由重复此信息。

根据您的问题要考虑的几点:

  • 有时新数据源应在运行时注册
  • 如果没有人使用某个ttl来关闭数据源,那么可能值得在应用程序端和RDBMS端关闭连接并释放资源。
  • 由于您已经提到了Spring Boot,它可能会进行执行器运行状况检查,以检查数据库的连接性,因此请确保它仍然满足要求。我之所以这样说是因为,如果它会以非200代码响应,并且您正在运行某些进行此类运行状况检查的高级环境(例如kubernetes,ecs等),则微服务可能因此不被视为运行状况良好,所以你的开发者可能会生气:)