在微服務項目中,可能會存在一個項目使用了兩個資料庫,這樣就需要我們配置多資料源。
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檔案夾,按照配置類掃描的路徑建立檔案路徑。其他按照正常的寫的業務代碼就可以