1、配置文件中配置双数据源分别为one和two,其他数据库配置正常配置即可
#one数据源
spring.datasource.druid.one.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.one.url=jdbc:mysql://123
spring.datasource.druid.one.username=123
spring.datasource.druid.one.password=123
#two数据源
spring.datasource.druid.two.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.two.url=jdbc:mysql://123
spring.datasource.druid.two.username=123
spring.datasource.druid.two.password=123
2、配置两个数据源的SqlSessionFactory,项目结构需要将两个数据源的dao层放在不通的目录内。 对应的mapper xml文件同样也要放在不同的目录里面。
@Configuration
@MapperScan(basePackages = "com.a.b.c.mapper.one", sqlSessionFactoryRef = "oneSqlSessionFactory")
public class OneSqlSessionConfig {
@Primary
@Bean(name = "oneSqlDatasource")
@ConfigurationProperties("spring.datasource.druid.one")
public DruidDataSource oneSqlDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "oneSqlTransactionManager")
@Primary
public DataSourceTransactionManager oneSqlTransactionManager() {
return new DataSourceTransactionManager(oneSqlDataSource());
}
@Bean(name = "oneSqlSessionFactory")
@Primary
public SqlSessionFactory oneSqlSqlSessionFactory(@Qualifier("oneSqlDatasource") DruidDataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/one/*/*.xml");
sessionFactory.setMapperLocations(resources);
return sessionFactory.getObject();
}
}
3、Service层根据需求注入不同数据源里面的dao就可以实现多数据源了。