需要引入的依赖
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector}</version>
</dependency>
<!--mysql版本可以不同-->
yml的配置
url一般写成jdbc-url(不要忘记) 这两个数据库不是主从复制,是完全并行的,master和slave是因为要区分数据库
spring:
application:
name: multi-datasource
## 主数据源配置
datasource:
master:
jdbc-url : jdbc:mysql://10.11.1.152:3306/yoga
username : root
password : YPlus_Root@2019
driver-class-name : com.mysql.jdbc.Driver
##副数据源配置
slave:
jdbc-url: jdbc:mysql://10.11.1.152:3306/yoga_report
username: root
password: YPlus_Root@2019
driver-class-name: com.mysql.jdbc.Driver
配置类
这里需要两个配置类来对应每个数据源,不理解不要紧,需要把注释的地方换成数据库对应的文件就行了,dao是只能查master数据源里面的,dao2只能查slave数据源里面的
@Configuration
//找到对应的Dao文件
@MapperScan(basePackages = "yplus.reports.web.dao",sqlSessionFactoryRef ="masterSqlSessionFactory" )
public class MasterDataSourceConfig {
private static final String MAPPER_LOCATION = "classpath*:mapper/*.xml";//映射的xml文件
@Primary
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.master")//数据源别名//数据源别名
public DataSource dataSource(){
DataSource build= DataSourceBuilder.create().build();
return build;
}
@Bean(name="masterTransactionManager")
@Primary
public PlatformTransactionManager dataSourceTransactionManager(@Qualifier("masterDataSource")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource")DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactoryBean=new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));
return sessionFactoryBean.getObject();
}
}
@Configuration
//找到对应的Dao文件
@MapperScan(basePackages = "yplus.reports.web.dao2",sqlSessionFactoryRef ="slaveSqlSessionFactory" )
public class SlaveDataSourceConfig {
private static final String MAPPER_LOCATION="classpath*:mapper2/*.xml";//映射的xml文件
@Bean(name = "slaveDataSource")
@ConfigurationProperties(prefix = "spring.datasource.slave")//数据源别名
public DataSource dataSource(){
DataSource build= DataSourceBuilder.create().build();
return build;
}
@Bean(name = "slaveTransactionManager")
public PlatformTransactionManager dataSourceTransactionManager(@Qualifier("slaveDataSource")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource")DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(SlaveDataSourceConfig.MAPPER_LOCATION));
return sessionFactoryBean.getObject();
}
}
结束语:
目前只能做到各查各的的数据库,一条Sql不能同时跨数据源 JOIN 到一起,还需要代码来实现