【问题标题】:No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2未定义 [javax.persistence.EntityManagerFactory] ​​类型的限定 bean:预期单个匹配 bean 但找到 2
【发布时间】:2016-06-29 13:26:30
【问题描述】:

我正在尝试解决两个数据源的问题。我在互联网上阅读了很多文字并根据this source做了简单的解决方案

我已经制作了两个“配置类”,如下所示:

@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 名称(它们都以“Source”开头)和存储库映射,如下所示:

@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();
}

我的服务很简单:

@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;
}

当我只有一个数据源时它工作得很好, 但现在它退出并出现错误: 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();
    }
}

【问题讨论】:

    标签: java spring orm annotations


    【解决方案1】:

    对不起各位,我的问题已经解决了。我错过了最简单的解决方案)。 我只需要用@Primary 注释一个EntityManagerFactory bean。

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

    显而易见的解决方案并不总是那么明显......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-01
      • 2015-11-13
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多