如何在 Spring 启动时将数据库与存储在主数据库中的配置连接?
How to connect database with configuration stored in main database at run time in Spring Boot?
我有一个要求,我有一个主数据库,其中包含不同客户端数据库连接的配置。当我 post 使用包含 JWT 的 Rest API 的数据时,该令牌将包含客户端名称并基于客户端名称,我必须从主数据库中获取客户端数据库配置并进行数据库连接并插入将数据存入该数据库。
我已经遍历了各种 post,但找不到任何具体的例子。
目前我在项目中使用 Spring 使用数据 JPA 启动。如果有人对 Spring JDBC 模板有任何解决方案,我准备将我的应用程序移至该模板。
正如@Jonathan Johx 提到的多租户应用程序,每个租户都有自己的模式。
为了提供一些具体的指导,您可以创建一个特殊的数据源来充当真实数据源的代理,每个数据源都可以负责 1 个模式连接。
Spring 已经提供 AbstractRoutingDatSource for this purpose or you can roll your own. Basically you should define some mapping method (determineCurrentLookupKey) 并维护键到实际数据源的映射,可以实时更新以防应连接新数据源。
我发现 更深入地解释了这种方法,因此没有理由重复这些信息。
根据您的问题需要考虑的几点:
- 有时新的数据源应该在运行时注册
- 如果没有人使用数据源,关闭连接并释放应用程序端和 RDBMS 端的资源可能是值得的。
- 既然您提到了 spring 引导,它可能有执行器运行状况检查来检查数据库连接,因此请确保它仍然满足要求。我之所以提到这一点,是因为如果它会以非 200 代码响应,并且你 运行 在一些像这样进行健康检查的高级环境中(如 kubernetes、ecs 等),微服务可能不被认为是健康的正因为如此,所以你的 devops 可能会生气 :)
我有一个要求,我有一个主数据库,其中包含不同客户端数据库连接的配置。当我 post 使用包含 JWT 的 Rest API 的数据时,该令牌将包含客户端名称并基于客户端名称,我必须从主数据库中获取客户端数据库配置并进行数据库连接并插入将数据存入该数据库。
我已经遍历了各种 post,但找不到任何具体的例子。
目前我在项目中使用 Spring 使用数据 JPA 启动。如果有人对 Spring JDBC 模板有任何解决方案,我准备将我的应用程序移至该模板。
正如@Jonathan Johx 提到的多租户应用程序,每个租户都有自己的模式。 为了提供一些具体的指导,您可以创建一个特殊的数据源来充当真实数据源的代理,每个数据源都可以负责 1 个模式连接。
Spring 已经提供 AbstractRoutingDatSource for this purpose or you can roll your own. Basically you should define some mapping method (determineCurrentLookupKey) 并维护键到实际数据源的映射,可以实时更新以防应连接新数据源。
我发现
根据您的问题需要考虑的几点:
- 有时新的数据源应该在运行时注册
- 如果没有人使用数据源,关闭连接并释放应用程序端和 RDBMS 端的资源可能是值得的。
- 既然您提到了 spring 引导,它可能有执行器运行状况检查来检查数据库连接,因此请确保它仍然满足要求。我之所以提到这一点,是因为如果它会以非 200 代码响应,并且你 运行 在一些像这样进行健康检查的高级环境中(如 kubernetes、ecs 等),微服务可能不被认为是健康的正因为如此,所以你的 devops 可能会生气 :)