当前位置: 首页 > 知识库问答 >
问题:

两个数据源使用相同的实体/存储库使用Spring数据 jpa

印辉
2023-03-14

我需要帮助设置一个应用程序,该应用程序将内部(主)MS SQL数据库DB1中的数据子集复制到另一个MySQL数据库DB2中,该数据库在Web服务器上运行,供Web应用程序使用(即,我想同步这两个数据库)。这两个数据库上的表具有相同的名称,尽管DB2上只定义了属性/列的子集。我想使用(xml配置的)spring、spring data jpa(即JpaRepository接口)和hibernate作为jpa提供者,因为我想用这些工具积累知识。

就我从其他讨论中了解到的情况而言,基本思想是根据以下内容定义Spring以使用两个entityManager工厂bean,每个bean使用一个disincdataSource(每个数据库一个):

spring jpa hibernate有更多的数据源

然后,我可以注入特定于持久性单元的实体管理器,并使用这些实体管理器执行数据库操作。但我想使用 spring-data 存储库:目前,我已经为 DB2 上需要的所有表/属性定义了一个 JPA 实体,包括字段。对于每个实体,我设置了一个@Repository注释接口,该接口会影响 JpaRepository,然后将这些存储库注入到相应的服务类中。

有没有办法将这些存储库注入我的服务层,并在注入过程中为它们分配一个持久性单元(即选择我要使用的数据库)?原则上,我可以定义所有存储库两次,一次为每个数据库签署@PersistenceContext(name=“NameOfPersistenceUnit”)注释,但我希望这不是必需的。

有人能概述我如何使用命名框架实现我的目标,或者有更简单的方法以编程方式在两个数据库之间复制数据。感谢任何帮助。

共有1个答案

姬衡
2023-03-14

看起来与您希望能够在运行时指向不同数据库但只希望保留一组存储库的问题非常相似。看看这个线程是否有帮助… Spring Data JPA具有多个数据源但只有一组存储库

 类似资料:
  • 我查看了博客帖子、教程、人们的知识库,但没有任何帮助。以下是我所拥有的: 有两个带有MySQL数据库的Docker容器:和。两个容器都已启动,数据库可见,我可以查询表。 我想在我的项目中有两个数据源:一个用于电子书,另一个用于Spring Security表。 我编写了一个简单的,其中我只是自动连接两个存储库并检查它们的大小。 运行应用程序时,我得到: 但是,如果我在没有第二个数据源并使用常规Sp

  • 问题内容: 如果我的实体具有已计算字段,应在保存到数据库(db 或)之前进行更新,如何在Hibernate或Spring Data Repository之前挂接方法调用 问题答案: 我认为最好的选择是使用和注释,为实体侦听器创建配置,然后您将可以访问要保存的每个实例,每次尝试使用以下方法持久化或更新内容时都会调用此方法hibernate或spring数据存储库 您只需要在实体bean上方添加注释

  • 我正在使用Spring的RedisTemplate与Redis接口。 目前,我在Redis中存储的数据使用OpsForHash操作,因为这最适合我存储的数据。 这可能使用一个单独的redistemplate吗? 谢了!

  • 问题内容: 如果我的实体已计算字段,应先保存字段,然后再保存到数据库(db 或),如何在Hibernate或Spring Data Repository之前挂接方法调用 问题答案: 我认为最适合您的方法是使用和注释,为实体侦听器创建配置,然后您将可以访问要保存的每个实例,每次尝试保留或更新内容时都会调用此方法。休眠或春季数据存储库 您只需要在实体bean上方添加注释 检查此链接以获取更多参考

  • 我在Spring Boot中有两个MySQL数据源,因此我有两个配置类。但它似乎只使用主数据源。所有实体都是为主数据源创建的,因此crawlerdb和userdb实体都是在userdb中创建的。 我的userdb主配置: 我的辅助爬网数据库配置: 两个架构的实体类位于不同的包中,如类名上方的EntityScan所示。但当我检查MySQL workbench中创建的模式时,我看到所有实体都是在use

  • 我的应用程序需要存储一组与另一个“真实”表具有相同数据库结构的“暂存数据”,但在人工查看暂存数据的内容之前,不能将其写入真实表。这些不仅是对实际表的添加,而且是对它的更新(因此,换句话说,在staging table中,有一些值与实际表具有相同的主键,因为它们引用了相同的实体实例)。 我的方法是让两个JPA对象具有相同的结构(即字段、列名等),但存储在不同的表中,并与Spring透视图完全分开处理