如果是两个jpa数据源,怎么配置不上呢?
来源:6-6 实例2-JPA-DB.链式事务管理器

他门说这就是人生
2019-12-18
首先,我的目录结构是这样的:
然后,我的配置是这样的:
@Configuration public class DbConfig { @Primary @Bean("db1EntityManager") public LocalContainerEntityManagerFactoryBean db1EntityManager() { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); vendorAdapter.setGenerateDdl(true); LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); Map<String, String> map = new HashMap<>(); map.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); em.setJpaPropertyMap(map); em.setDataSource(db1DataSource()); em.setPackagesToScan("com.gaojingsi.transaction.muiltidatasourcetransactiondemo.entity.db1"); em.setJpaVendorAdapter(vendorAdapter); return em; } @Primary @Bean(name = "db1DataSource") @ConfigurationProperties(prefix = "spring.datasource.db1") public DataSource db1DataSource() { return DataSourceBuilder.create().build(); } @Bean("db2EntityManager") public LocalContainerEntityManagerFactoryBean db2EntityManager() { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); vendorAdapter.setGenerateDdl(true); LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); Map<String, String> map = new HashMap<>(); map.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); em.setJpaPropertyMap(map); em.setDataSource(db2DataSource()); em.setPackagesToScan("com.gaojingsi.transaction.muiltidatasourcetransactiondemo.entity.db2"); em.setJpaVendorAdapter(vendorAdapter); return em; } @Bean(name = "db2DataSource") @ConfigurationProperties(prefix = "spring.datasource.db2") public DataSource db2DataSource() { return DataSourceBuilder.create().build(); } @Primary @Bean public PlatformTransactionManager transactionManager() { JpaTransactionManager jpaTransactionManager1 = new JpaTransactionManager(); jpaTransactionManager1.setEntityManagerFactory(db1EntityManager().getObject()); JpaTransactionManager jpaTransactionManager2 = new JpaTransactionManager(); jpaTransactionManager2.setEntityManagerFactory(db2EntityManager().getObject()); ChainedTransactionManager chainedTransactionManager = new ChainedTransactionManager(jpaTransactionManager1, jpaTransactionManager2); return chainedTransactionManager; } }
然后启动就报错:
*************************** APPLICATION FAILED TO START *************************** Description: Field db1UserDAO in com.gaojingsi.transaction.muiltidatasourcetransactiondemo.service.impl.UserServiceImpl required a bean named 'entityManagerFactory' that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean named 'entityManagerFactory' in your configuration.
请问老师,还要做什么配置吗?
写回答
1回答
-
使用spring data配置多个数据源,比较好的方式是通过包名将不同的数据库相关的模块分开,然后,你的`DbConfig`也需要分成两个配置类,分别配置两个数据源的jpa配置,通过`@EnableJpaRepositories`的标签来控制不同的包名下的DAO类要使用哪个jpa的配置。
具体的方法,我找了一个链接,你可以参考一下:
https://www.baeldung.com/spring-data-jpa-multiple-databases
00
相似问题