7

Tôi có 2 cơ sở dữ liệu riêng biệt và tôi đang cố gắng truy cập chúng trong kho. Rất tiếc, tôi nhận được ngoại lệ sau.NoUniqueBeanDefinitionException: Không có loại đậu đủ điều kiện [javax.persistence.EntityManagerFactory] được định nghĩa: bean kết hợp đơn dự kiến ​​

Những điều tôi đã cố gắng

  • đã thử làm một trong những đậu như Primary.
  • đã sử dụng PersistenceContext như có thể thấy trong mã bên dưới.

My ExceptionTrace

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.crud.repository.mymerkNew.OrderRepository com.crud.controller.OrderController.nextGenorder; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderRepository': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2: mymerkLimsEntityManagerFactory,nextGenEntityManagerFactory 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:961) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:950) 
    at com.mymerkbiotech.blueberry.crud.Application.main(Application.java:24) 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.mymerkbiotech.blueberry.crud.repository.mymerkNew.OrderRepository com.mymerkbiotech.blueberry.crud.controller.OrderController.nextGenorder; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderRepository': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2: mymerkLimsEntityManagerFactory,nextGenEntityManagerFactory 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) 
    ... 16 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderRepository': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2: mymerkLimsEntityManagerFactory,nextGenEntityManagerFactory 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:357) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1127) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1051) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533) 
    ... 18 more 
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2: mymerkLimsEntityManagerFactory,nextGenEntityManagerFactory 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:572) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:531) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:697) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:670) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:354) 
    ... 29 more 

My để điều khiển mà chỉ đơn giản là Autowiring Repository

@RestController 
@RequestMapping("/Order") 
public class OrderController { 

    @Autowired 
    private OrderRepository nextGenorder; 

trật tự Repository My

@Repository 
public class OrderRepository extends AbstractRepository<Order> implements 
     OrderRepositoryInterface { 
    private static final String SELECT_QUERY = "select p from v_orders p"; 
    @PersistenceContext(name = "nextGenEntityManagerFactory") 
    private EntityManager nextGenEntityManagerFactory;; 

    public EntityManager getEntityManager() { 
     return nextGenEntityManagerFactory; 
    } 

    public void setEntityManager(EntityManager entityManager) { 
     this.nextGenEntityManagerFactory = entityManager; 
    } 

    public List<Order> selectAll() { 
     javax.persistence.Query query = nextGenEntityManagerFactory 
       .createQuery(SELECT_QUERY); 
     List<Order> order = query.getResultList(); 
     return order; 
    } 

FirstConfig My tập tin

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(basePackages = "xx.xx.xx.crud.repository.running", entityManagerFactoryRef = "nextGenEntityManagerFactory", transactionManagerRef = "transactionManagerOne") 
@PropertySource("classpath:application.properties") 
public class NextGenDbConfig { 

    @Value("${spring.datasourcemymerkNew.driver-class-name}") 
    String driverClassName = ""; 
    @Value("${spring.datasourcemymerkNew.url}") 
    String url = ""; 
    @Value("${spring.datasourcemymerkNew.username}") 
    String userName = ""; 
    @Value("${spring.datasourcemymerkNew.password}") 
    String password = ""; 
    @Autowired 
    @Qualifier("jpaNextGenVendorApapter") 
    JpaVendorAdapter jpaNextGenVendorApapter; 

    @Bean(name = "nextGenDataSource") 
    @Primary 
    public DataSource nextGenDataSource() { 
     return DataSourceBuilder.create().url(url) 
       .driverClassName(driverClassName).username(userName) 
       .password(password).build(); 
    } 

    @Bean 
    @Primary 
    public LocalContainerEntityManagerFactoryBean nextGenEntityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); 

     factoryBean.setDataSource(nextGenDataSource()); 
     factoryBean.setJpaVendorAdapter(jpaNextGenVendorApapter); 
     factoryBean.setPackagesToScan(R.nextGenDB_PACKAGE); 
     factoryBean.setPersistenceUnitName("nextGenPersistenceUnit"); 
     factoryBean.setJpaProperties(additionalProperties()); 

     return factoryBean; 
    } 

    @Bean 
    PlatformTransactionManager transactionManagerOne() { 
     return new JpaTransactionManager(nextGenEntityManagerFactory() 
       .getObject()); 
    } 

    @Bean(name = "jpaNextGenVendorApapter") 
    @Primary 
    public JpaVendorAdapter jpaNextGenVendorAdapter() { 
     HibernateJpaVendorAdapter jpaNextGenVendorAdapter = new HibernateJpaVendorAdapter(); 
     jpaNextGenVendorAdapter.setShowSql(true); 
     jpaNextGenVendorAdapter.setGenerateDdl(true); 
     jpaNextGenVendorAdapter.setDatabase(Database.MYSQL); 
     return jpaNextGenVendorAdapter; 
    } 

    Properties additionalProperties() { 
     Properties properties = new Properties(); 
     properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); 
     properties.setProperty("hibernate.dialect", 
       "org.hibernate.dialect.MySQL5Dialect"); 
     return properties; 
    } 

    @Bean 
    public HibernateExceptionTranslator hibernateExceptionTranslator() { 
     return new HibernateExceptionTranslator(); 
    } 

} 

và cấu hình thứ hai

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(basePackages = "com.mymerkbiotech.blueberry.crud.repository.running", entityManagerFactoryRef = "mymerkLimsEntityManagerFactory", transactionManagerRef = "transactionManagertwo") 
@PropertySource("classpath:application.properties") 
public class mymerkDbConfig { 

    @Value("${spring.datasourcemymerkLims.driver-class-name}") 
    String driverClassName = ""; 
    @Value("${spring.datasourcemymerkLims.url}") 
    String url = ""; 
    @Value("${spring.datasourcemymerkLims.username}") 
    String userName = ""; 
    @Value("${spring.datasourcemymerkLims.password}") 
    String password = ""; 
    @Autowired 
    @Qualifier("jpamymerkVendorAdapter") 
    JpaVendorAdapter mymerkVendorAdapter; 

    @Bean(name = "mymerklimsDataSource") 
    public DataSource mymerklimsDataSource() { 
     return DataSourceBuilder.create().url(url) 
       .driverClassName(driverClassName).username(userName) 
       .password(password).build(); 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean mymerkLimsEntityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); 

     factoryBean.setDataSource(mymerklimsDataSource()); 

     factoryBean.setJpaVendorAdapter(mymerkVendorAdapter); 
     factoryBean.setPackagesToScan(R.mymerkDB_PACKAGE); 
     factoryBean.setPersistenceUnitName("mymerklimsPersistenceUnit"); 
     factoryBean.afterPropertiesSet(); 

     return factoryBean; 
    } 

    @Bean 
    PlatformTransactionManager transactionManagerTwo() { 
     return new JpaTransactionManager(mymerkLimsEntityManagerFactory() 
       .getObject()); 
    } 

    @Bean(name = "jpamymerkVendorAdapter") 
    public JpaVendorAdapter jpamymerkVendorAdapter() { 
     HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter(); 
     jpaVendorAdapter.setShowSql(true); 
     jpaVendorAdapter.setGenerateDdl(true); 
     jpaVendorAdapter.setDatabase(Database.MYSQL); 
     return jpaVendorAdapter; 
    } 

    Properties additionalProperties() { 
     Properties properties = new Properties(); 
     properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); 
     properties.setProperty("hibernate.dialect", 
       "org.hibernate.dialect.MySQL5Dialect"); 
     return properties; 
    } 

} 

tôi đã cố gắng gỡ lỗi trong PersistenceAnnotationBeanPostProcessor nhưng đã mất sớm.

Trả lời

9

Tôi nghĩ bạn nên đặt tên cho LocalContainerEntityManagerFactoryBean trong cả hai cấu hình. Vì vậy, nó sẽ giống như thế:

@Bean(name = "nextGenEntityManagerFactory") 
@Primary 
public LocalContainerEntityManagerFactoryBean nextGenEntityManagerFactory() { 

cho người đầu tiên và

@Bean(name = "gatcLimsEntityManagerFactory") 
public LocalContainerEntityManagerFactoryBean gatcLimsEntityManagerFactory() { 

cho phần thứ hai.

+0

điều này đã giúp .... tôi đã dành 2 ngày để giải quyết vấn đề này. Cảm ơn rất nhiều . :) – Roxy

+0

Rất vui được! – FDirlikli

Các vấn đề liên quan