具有多个数据库连接的 Spring Boot

Vic*_*edu 5 spring-data-jpa spring-boot spring-rest

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

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

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

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

我将这个小型 Github 项目与我的作品一起上传。 https://github.com/victorqedu/MultipleSpringBootDS

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

@Autowired
public AntibiogramaAntibioticeDAOHibernateImpl(EntityManager theEntityManager) {
    entityManager = theEntityManager;
}
Run Code Online (Sandbox Code Playgroud)

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

@PersistenceContext
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)

我不确定问题是 EntityManagaer 还是我从 EntityManager.unwrap 获得的会话,似乎关于此的文档很少......

özk*_*dil 3

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

因此在你的代码中你应该

 public AntibiogramaAntibioticeDAOHibernateImpl(
@Qualifier("primaryEntityManagerFactory") EntityManager theEntityManager) 
Run Code Online (Sandbox Code Playgroud)