我得到以下错误:

org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有'javax.persistence.EntityManagerFactory'类型的限定bean可用:期望的单个匹配bean但找到4:D1EntityManager,D2EntityManager,BaseEntityManager,oldDbEntityManager

我在不同的文件中声明了这个模板后面的4个 EntityManagers

RepositoryConfigurationTemplate

@Configuration
@EnableJpaRepositories(
    basePackages = "...myReposPackages...",
    entityManagerFactoryRef = ConfigurationChanges.ENTITY_MANAGER_BEAN_NAME,
    transactionManagerRef = ConfigurationChanges.TRANSACTION_MANAGER_BEAN_NAME
)
@ComponentScan("...myScanPackages...")
@EnableConfigurationProperties
public class MyRepoConfigClass {
  ...
  ...
  public final static String ENTITY_MANAGER_BEAN_NAME = "...EntityManagerSingleConstant..."; // D1EntityManager / D2EntityManager / BaseEntityManager / oldDbEntityManager for different classes
  public final static String TRANSACTION_MANAGER_BEAN_NAME = "...TransactionManagerSingleConstant..."; // D1TransactionManager / D2TransactionManager / BaseTransactionManager / oldDbTransactionManager for different classes

  @Bean(name=ENTITY_MANAGER_BEAN_NAME)
  @Qualifier(ENTITY_MANAGER_BEAN_NAME) // Not sure if this is needed, I just added it trying to make it work
  public LocalContainerEntityManagerFactoryBean myClassEntityManager() {
    LocalContainerEntityManagerFactoryBean em
            = new LocalContainerEntityManagerFactoryBean();
    ... initializations ...
    em.setDataSource(...myDataSource...)
    em.setPackagesToScan("...EntitiesPackagesToScan...")

    em.setPersistenceUnitName(ENTITY_MANAGER_BEAN_NAME); // Not sure if this is needed, I just added it trying to make it work
  }

  @Bean(name=TRANSACTION_MANAGER_BEAN_NAME)
  @Qualifier(TRANSACTION_MANAGER_BEAN_NAME) // Not sure if this is needed, I just added it trying to make it work
  public PlatformTransactionManager myClassTransactionManager() {
    JpaTransactionManager transactionManager
            = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(
            myClassEntityManager().getObject());
    return transactionManager;
  }

}

我试图从 Services 引用它像这样:

ServiceTemplate

@Service
public class myServiceClass {

  @PersistenceContext(unitName = MyRepoConfigClass.ENTITY_MANAGER_BEAN_NAME) // Thought this might be the solution for JPA PersistenceContext, but did not work anyway
  @Qualifier(MyRepoConfigClasss.ENTITY_MANAGER_BEAN_NAME) // Not sure if this is supposed to be done like this. In normal spring boot components it works
  private EntityManager entityManager; // <- This injection fails

}

从我的角度来看,我正确定 EntityManger 应该使用 @PersistenceContextunitName )或 @Qualifier

但是,正如错误所说,springboot不知道4 beans 中的哪一个使用 .

我错过了什么吗?

UPDATE

完整堆栈跟踪:

org.springframework.beans.factory.BeanCreationException:创建名为'changes'的bean时出错:持久性依赖项的注入失败;嵌套异常是org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有类型'javax.persistence.EntityManagerFactory'的限定bean可用:期望的单个匹配bean但在org.springframework.orm中找到5:D1EntityManager,D2EntityManager,BaseEntityManager,oldDbEntityManager,deviceApiGwDbConfigurationDbEntityManager org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean上的.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:356)〜[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE]在Org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575)〜[spring]的AbstractAutowireCapableBeanFactory.java:1383)~ [spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE] -beans-5.1.2.RELEASE.jar:5.1.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireC) apableBeanFactory.java:498)〜[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:320) 〜[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE] org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)~ [spring-beans-5.1.2 .RELEASE.jar:5.1.2.RELEASE]在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)〜[spring-beans-5.1.2.RELEASE.jar:5.1.2 . 在org.springframework.beans的org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)〜[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]中发布 . or.s.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(abst)中的factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846)〜[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE] orct.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)〜[spring-context]中的ractApplicationContext.java:869)~ [spring-context-5.0.9.RELEASE.jar:5.0.9.RELEASE] -5.0.9.RELEASE.jar:5.0.9.RELEASE]在org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)〜[spring-boot-2.0.5.RELEASE . jar:2.0.5.RELEASE]在org.springframework.boot上的org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)[spring-boot-2.0.5.RELEASE.jar:2.0.5.RELEASE] .SpringApplication.refreshContext(SpringApplication.java:412)[spring-boot-2.0.5.RELEASE.jar:2.0.5.RELEASE]在org.springframework.boot.SpringApplication.run(SpringApplication.java:333)[spring- boot-2.0.5.RELEASE.jar:2.0.5.RELEASE]在org.springframework.boot.SpringApplication.run(SpringApplication.java:1277)[spring-boot-2.0.5.RELEASE.jar:2.0.5 . 发布在org.springframework.boot.SpringApplication.run(SpringAppli阳离子.java:1265)[spring-boot-2.0.5.RELEASE.jar:2.0.5.RELEASE]在com.mycompany.device.api.gw.Application.main(Application.java:35)[classes /:导致:org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有类型'javax.persistence.EntityManagerFactory'的限定bean可用:期望的单个匹配bean但在org.springframework中找到5:D1EntityManager,D2EntityManager,BaseEntityManager,oldDbEntityManager,deviceApiGwDbConfigurationDbEntityManager org.springframework.beans.factory.support.DefaultListableBeanFactory中的.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1139)〜[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE] . 在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:569)的resolveNamedBean(DefaultListableBeanFactory.java:1079)〜[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]〜 [ spring ORM-5.0.9.RELEASE.jar:5 . 0.9.RELEASE] at在org.springframework.orm.jpa.support上的org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:532)〜[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE] .PersistenceAnnotationBeanPostProcessor $ PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:700)〜[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor $ PersistenceElement.getResourceToInject(在org.springframework.beans.factory.annotation.InjectionMetadata $ InjectedElement.inject(InjectionMetadata.java:180)中的PersistenceAnnotationBeanPostProcessor.java:673)〜[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE]〜 [spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)〜[spring-beans-5.1.2 . 位于org.springframework.orm.jpa.support.PersistenceAnnotationBeanPos的RELEASE.jar:5.1.2.RELEASE] tProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:353)〜[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE] ...省略了17个常用帧