Spring-boot JPA 连接到 postgres,其中在运行时提供数据库和模式

Posted

技术标签:

【中文标题】Spring-boot JPA 连接到 postgres,其中在运行时提供数据库和模式【英文标题】:Spring-boot JPA connect to postgres where database and schema are provided at runtime 【发布时间】:2016-11-01 01:57:22 【问题描述】:

我正在构建一个多租户应用程序,其中租户数据库配置存储在 Redis 中。根据请求,我将查询 Redis 以获取为该租户配置的数据库和架构,该应用程序是基于 Spring Boot 构建的。

我查看了 spring boot 的 JPA 示例,并在谷歌上搜索了一些合适的解决方案,不幸的是,我找不到。

这真的可以使用此处提供的 JPA 示例吗? https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-data-jpa

请建议我解决此问题的任何其他最佳方法

谢谢

【问题讨论】:

【参考方案1】:

Spring Data JPA 使用 JPA 注释来定义域模型。这些 JPA 实体为您的数据库定义模式。显然,您无法更改这些实体,也无法在运行时更改 DB 架构。

所以不,使用 Spring Boot + Spring Data JPA 组合无法在运行时更新架构。

数据库连接(例如 DB URL、用户名密码)可以更加灵活。您需要以编程方式创建 DataSource bean,并以某种方式以编程方式定义每个租户的每个查询要使用的数据源。但这不是 Spring 和 JPA 生态系统的要求,因此您可能会遇到很多问题。

我以前在这样的系统上工作过,但我们通过 JDBC 使用普通 SQL 查询,并以编程方式创建数据库连接以实现运行时的架构更改。

【讨论】:

以上是关于Spring-boot JPA 连接到 postgres,其中在运行时提供数据库和模式的主要内容,如果未能解决你的问题,请参考以下文章

将 Spring-Boot 连接到 MySQL

无法将 spring-boot 2 服务连接到不同容器中的 mysql

使用 spring-boot 连接到 spring-batch 和应用程序数据库

使用 sqlalchemy 连接到本地 postgresql

JPA 正在连接到一个不存在的 HSQL 数据库?

使用 micronaut-data-hibernate-jpa 库连接到 jpa 时出错