天天看點

使用阿裡資料源配置多資料源

使用阿裡資料源配置多資料源

在微服務項目中,可能會存在一個項目使用了兩個資料庫,這樣就需要我們配置多資料源。

1.建立配置類

其中需要配置@Primary 這個注解隻能在主資料源中配置 否則會報錯

@MapperScan中配置的為使用主資料源的dao和mapper存放路徑,每一個資料源都有他的獨有的dao和mapper路徑

1. @Configuration
2. @MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
3. public class MasterDataSourceConfig {
4. 
5. // 精确到 master 目錄,以便跟其他資料源隔離 
6. static final String PACKAGE = "com.airboot.bootdemo.dao.master";
7. static final String MAPPER_LOCATION = "classpath*:mapper/master/*.xml";
8. 
9. //資料庫資訊
10. @Bean(name = "masterDataSource")
11. @Primary
12. public DataSource masterDataSource() {
13. DruidDataSource dataSource = new DruidDataSource();
14.         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
15.         dataSource.setUrl("jdbc:mysql://localhost:3306/humanresource?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC");
16.         dataSource.setUsername("root");
17.         dataSource.setPassword("root");
18. return dataSource;
19.     }
20. 
21. @Bean(name = "masterTransactionManager")
22. @Primary
23. public DataSourceTransactionManager masterTransactionManager() {
24. return new DataSourceTransactionManager(masterDataSource());
25.     }
26. 
27. @Bean(name = "masterSqlSessionFactory")
28. @Primary
29. public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
30. throws Exception {
31. final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
32.         sessionFactory.setDataSource(masterDataSource);
33.         sessionFactory.setMapperLocations(
34. new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));
35. return sessionFactory.getObject();
36.     }
37. }      

2.寫入從資料源配置

除了上文所說的需要修改的都是固定寫法 。照葫蘆畫瓢就可以了

1. @Configuration
2. @MapperScan(basePackages = SlaveDataSourceConfig11.PACKAGE, sqlSessionFactoryRef = "slaveSqlSessionFactory")
3. public class SlaveDataSourceConfig11 {
4. 
5. // 精确到 Slave 目錄,以便跟其他資料源隔離
6. static final String PACKAGE = "com.airboot.bootdemo.dao.test";
7. static final String MAPPER_LOCATION = "classpath*:mapper/test/*.xml";
8. 
9. @Bean(name = "slaveDataSource")
10. public DataSource slaveDataSource() {
11. DruidDataSource dataSource = new DruidDataSource();
12.         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
13.         dataSource.setUrl("jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC");
14.         dataSource.setUsername("root");
15.         dataSource.setPassword("root");
16. return dataSource;
17.     }
18. 
19. @Bean(name = "slaveTransactionManager")
20. public DataSourceTransactionManager slaveTransactionManager() {
21. return new DataSourceTransactionManager(slaveDataSource());
22.     }
23. 
24. @Bean(name = "slaveSqlSessionFactory")
25. public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource slaveDataSource)
26. throws Exception {
27. final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
28.         sessionFactory.setDataSource(slaveDataSource);
29.         sessionFactory.setMapperLocations(
30. new PathMatchingResourcePatternResolver().getResources(SlaveDataSourceConfig11.MAPPER_LOCATION));
31. return sessionFactory.getObject();
32.     }
33. 
34. }      

3.建立業務代碼

主要建立dao和mapper檔案夾,按照配置類掃描的路徑建立檔案路徑。其他按照正常的寫的業務代碼就可以

使用阿裡資料源配置多資料源