spring - 具有自动配置功能的 Spring Data JPA 应用程序的多个数据库

标签 spring hibernate spring-boot spring-data

我在 Spring Boot 上使用 Spring Data JPA,这给了我很好的自动配置,因此我不需要为每个实体配置 EntityManager 和 DataSource。

但是,我的应用程序可能需要连接到两个不同的数据库。因此,我的应用程序上的一些实体需要映射到数据库,而其他实体需要映射到不同的数据库

我已经探索过这个仓库 Link

并发现存储库为每个实体配置每个 EntityManager 和 TransactionManager。如果我的应用程序有很多实体,这可能会非常耗时。

是否有可能我仍然依赖 Spring Boot autoconfig for Spring Data JPA 并且仍然使用两个不同的数据库?

最佳答案

每个数据源只需一个配置,而不是每个实体(每个数据源可以有多个实体)。例如,假设您正在现有数据库之上开发一个系统,其中产品目录位于一个数据库中,库存信息位于另一个数据库中,而订单信息需要进入一个完全不同的数据库中。此外,您的(新)应用程序的客户信息需要存储在一个全新的数据库中,因为其他数据库的所有者不允许您接触他们的数据库。因此,总的来说,您需要处理四个数据库。

您将需要四个数据源配置,每个数据源配置对应您需要处理的四个数据库。每个配置必须定义:

  1. 一个 SQL DataSource,用于提供有关连接到数据库的信息;
  2. 使用 DataSourceEntityManagerFactory
  3. EntityManager 可以使用的 TransactionManager 实现;和
  4. 对 Java 包的引用,EntityManager 可以在其中找到映射到 DataSource 的实体类。

如果数据库操作一次仅针对一个数据库执行,您可以在每种配置中使用 JpaTransactionManager(这意味着您将需要四个 JpaTransactionManager) > 声明)。但是,如果数据库操作可能跨越多个数据库,您可以声明一个 JtaTransactionManager 或声明四个 JpaTransactionManager(每个 DataSource 一个) code>s)并将它们包装在一个 ChainedTransactionManager 中(总共五个事务管理器声明)。

由于您的实体类将绑定(bind)到特定的数据源,因此您需要使用不同的 Java 包来隔离它们。例如,您可以有 org.example.model.catalogorg.example.model.inventoryorg.example.model.orderorg.example.model.customer

关于spring - 具有自动配置功能的 Spring Data JPA 应用程序的多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32470306/

相关文章:

hibernate - 最大连接被奇怪地炸毁,而大量空闲连接

java - 更新子查询中的数据

java - 从源代码使用 Spring 框架

xml - 为什么我的 spring bean 需要前缀 'batch:'

sql - 与 hibernate 标准对同一实体进行多重关联

java - 无法执行目标 org.springframework.boot :spring-boot-maven-plugin:2. 1.12.RELEASE:run (default-cli)

java - 在bash环境中的Intellij IDE中启动spring boot

java - Maven 无法使用 Eclipse 解决 Jacob 依赖关系

java - 运行 spring mvc 项目时出现一些错误

java - 在 Spring 中读取 2 个具有相同变量名的属性文件