请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如果是两个jpa数据源,怎么配置不上呢?

首先,我的目录结构是这样的:

https://img1.sycdn.imooc.com/szimg/5dfa3362096981df04420446.jpg

然后,我的配置是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@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;
    }
 
}

然后启动就报错:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
***************************
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回答

大漠风 2020-01-06 02:26:16

使用spring data配置多个数据源,比较好的方式是通过包名将不同的数据库相关的模块分开,然后,你的`DbConfig`也需要分成两个配置类,分别配置两个数据源的jpa配置,通过`@EnableJpaRepositories`的标签来控制不同的包名下的DAO类要使用哪个jpa的配置。

具体的方法,我找了一个链接,你可以参考一下:

https://www.baeldung.com/spring-data-jpa-multiple-databases

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号