在微服务项目中,可能会存在一个项目使用了两个数据库,这样就需要我们配置多数据源。
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文件夹,按照配置类扫描的路径建立文件路径。其他按照正常的写的业务代码就可以