【问题标题】:Spring boot with multiple database connections具有多个数据库连接的 Spring Boot
【发布时间】:2022-11-11 23:16:38
【问题描述】:

我制作了一个简单的 SpringBoot REST 应用程序用于测试目的,其中表位于 2 个数据库中,一个是 Mysql,一个是 Postgresql。要配置 2 个连接,我使用了来自 here 的说明,在第 6 点 - “Spring Boot 中的多个数据库”,一切似乎都很好,启动了 2 个连接,但只有主连接有效。

因此,如果 Mysql 连接被注释为 @Primay 只有 Mysql REST 服务工作,在 Postgresql 上,所有表的错误都是“org.hibernate.hql.internal.ast.QuerySyntaxException: <Entity_Name> 未映射“。但是,如果我进行一次更改并在 Postgresql 连接上设置 @Primary,那么所有 Postgres 表都在工作,并且所有 Mysql 表都给出相同的错误(表未映射)。

所以不知何故,我认为正确的连接不是根据包自动选择的。

更新: 我找到另一个教程here 使用不同的数据库类型,我按照说明进行但结果相同,辅助数据库中的所有表都报错“org.hibernate.hql.internal.ast.QuerySyntaxException: <Entity_Name> 未映射“。我认为没有使用辅助连接,不知何故,主连接默认在错误的表上,但我不知道为什么。

我用我的工作上传了this 小型 Github 项目。 https://github.com/victorqedu/MultipleSpringBootDS

更新:在 DAO 类中,a 自动装配了构造函数,@Autowire 设置了错误的 EntityManager(我认为这是问题的根源),我可以手动指定正确的 EntityManager 吗?

@Autowired
public AntibiogramaAntibioticeDAOHibernateImpl(EntityManager theEntityManager) {
    entityManager = theEntityManager;
}

我还尝试了 EntityManager 上的注释 @PersistenceContext 但结果是一样的。

@PersistenceContext
private EntityManager entityManager;

我不确定问题是 EntityManagaer 还是我从 EntityManager.unwrap 获得的 Session,似乎很少有关于这个的文档......

【问题讨论】:

  • 您需要搜索多个数据库与 JPA,这是一个不同的野兽。您可以在这里找到一种解决方案:baeldung.com/spring-data-jpa-multiple-databases
  • 这正是我应用的解决方案,它似乎不起作用。
  • 你试过吗公共 AntibiogramaAntibioticeDAOHibernateImpl(@Qualifier("primaryEntityManagerFactory") EntityManager theEntityManager)您可以选择要自动装配的内容预选赛
  • 谢谢,这解决了问题,如果您请添加回复,我会将其标记为解决方案。

标签: spring-boot spring-data-jpa spring-rest


【解决方案1】:

这可以用Qualifier在简短的描述中解决如果您有多个相同类型的 bean(如 EntityManager),您应该使用限定符来连接它们。

因此在your code 你应该

 public AntibiogramaAntibioticeDAOHibernateImpl(
@Qualifier("primaryEntityManagerFactory") EntityManager theEntityManager) 

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2022-01-13
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多