2016-06-29 1 views
0

Я пытаюсь решить проблему с двумя источниками данных. Я прочитал много текста в Интернете и сделал простое решение, основанное наОпределяющий компонент типа [javax.persistence.EntityManagerFactory] определяется: ожидаемый единичный компонент соответствия, но найден 2

Я сделал два «конфигурации классов», как это:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(
     entityManagerFactoryRef = "ResultEntityManagerFactory", 
     transactionManagerRef = "ResultEntityTransactionManager", 
     basePackages = "com.migr.result.repositories" 
     ) 
public class ResultTablesConfig { 
    @Autowired 
    @Qualifier("orclAdapter") 
    JpaVendorAdapter jpaVendorAdapter; 

    @Bean(name="ResultEntityDataSource") 
    @ConfigurationProperties(prefix = "datasource.migr.result") 
    public DataSource declReaconDS() { 
     return new DataSource(); 
    } 

    @Bean(name = "ResultEntityManager") 
    public EntityManager entityManager() { 
     return entityManagerFactory().createEntityManager(); 
    } 

    @Bean(name = "ResultEntityManagerFactory") 
    public EntityManagerFactory entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); 
     lef.setDataSource(declReaconDS()); 
     lef.setJpaVendorAdapter(jpaVendorAdapter); 
     lef.setPackagesToScan("com.migr.result.tables.*"); 
     lef.setPersistenceUnitName("ResultEntityPersistenceUnit"); 
     lef.afterPropertiesSet(); 
     return lef.getObject(); 
    } 

    @Bean(name = "ResultEntityTransactionManager") 
    public PlatformTransactionManager transactionManager() { 
     return new JpaTransactionManager(entityManagerFactory()); 
    } 
} 

и еще один, практически же - SourceTablesConfig. Разница лишь в том @Bean имена (все они начинаются с "Источник") и отображение хранилищами, как это:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(
     entityManagerFactoryRef = "SourceEntityManagerFactory", 
     transactionManagerRef = "SourceEntityTransactionManager", 
       basePackages = "com.migr.source.repositories" 
      ) 

public class SourceTablesConfig { 
............... 
@Bean(name = "SourceEntityManagerFactory") 
public EntityManagerFactory entityManagerFactory(){ 
    LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); 
    lef.setDataSource(declReaconDS()); 
    lef.setJpaVendorAdapter(jpaVendorAdapter); 
    lef.setPackagesToScan("com.migr.source.tables.*"); 
    lef.setPersistenceUnitName("SourceEntityPersistenceUnit"); 
    lef.afterPropertiesSet(); 
    return lef.getObject(); 
} 

Мои услуги являются simle:

@Service 
public class CatalogsSourceService { 
@Autowired 
CatalogsSourceRepository catalogsrepository; 
....... 
} 

где CatalogsSourceRepository extends JpaRepository<Catalogs, Long>

Мой «главный "класс:

@RestController 
@RequestMapping("/") 
public class Main { 

@Autowired 
CatalogsSourceService source_serv; 

@Autowired 
CatalogsResultService result_serv; 
@RequestMapping 
public Object index() { 
    Map<String,List> results = new HashMap<>(); 
    results.put("First", source_serv.findAll()); 
    results.put("Second", source_serv.findAll()); 
    return results; 
} 

it w orked прекрасно, когда у меня был только один DataSource, , но теперь она выходит с ошибкой: expected single matching bean but found 2: SourceEntityManagerFactory,ResultEntityManagerFactory

Я не понимаю, почему это происходит. Мое решение выглядит практически так, как указано в ссылке выше, но его ошибка не возникает.

Я буду очень благодарен за любую помощь

PS. забыл о моем «AppConfig»:

@Configuration 
@ComponentScan(basePackages = { "com.migr" }) 
public class AppConfig { 
    @Bean(name="orclAdapter") 
    public JpaVendorAdapter jpaVendorAdapter() { 
     HibernateJpaVendorAdapter jpaVendorAdapter = new  HibernateJpaVendorAdapter(); 
     jpaVendorAdapter.setShowSql(true); 
     jpaVendorAdapter.setDatabase(Database.ORACLE);   
     return jpaVendorAdapter; 
    } 

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

ответ

0

Извините, ребята, моя проблема решена. Я пропустил самое простое решение). Мне просто пришлось комментировать один файн EntityManagerFactory с аннотацией @Primary.

@Bean(name = "SourceEntityManagerFactory") 
@Primary 
public EntityManagerFactory entityManagerFactory() { 
........... 
} 

очевидные решения не всегда так очевидно ...