一、yml配置两个自定义数据源
master:
dataSource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/androids?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: 123456
password: 123456
# 配置从库的相关配置
second:
dataSource:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@1234:1521/pdbwer
username: 123456
password: 123546
二、根据两个数据源创建两个Config
1、MasterDataSourceConfig
basePackages 对应@Mapper修饰的mapper包路径
package com.dbxq.androids.config;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.dbxq.androids.mapper",sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
private static final String MAPPER_LOCATION = "classpath:mapping/*.xml";
@Value("${master.dataSource.url}")
private String url;
@Value("${master.dataSource.username}")
private String username;
@Value("${master.dataSource.password}")
private String password;
@Value("${master.dataSource.driver-class-name}")
private String driverClassName;
@Primary
@Bean("masterDataSource")
public DataSource getMasterDataSource(){
HikariDataSource dataSource = new HikariDataSource();
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDriverClassName(driverClassName);
dataSource.setJdbcUrl(url);
return dataSource;
}
@Bean("masterTransactionManager")
@Primary
public TransactionManager getMasterTransactionManager(){
return new DataSourceTransactionManager
( getMasterDataSource());
}
@Bean("masterSqlSessionFactory")
@Primary
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(masterDataSource);
sqlSessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver()
.getResources(MAPPER_LOCATION)
);
return sqlSessionFactory.getObject();
}
}
2、SecondDataSourceConfig
package com.dbxq.androids.config;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.dbxq.androids.second",sqlSessionFactoryRef = "secondSqlSessionFactory")
public class SecondDataSourceConfig {
private static final String MAPPER_LOCATION = "classpath:mapping/second/*.xml";
@Value("${second.dataSource.url}")
private String url;
@Value("${second.dataSource.username}")
private String username;
@Value("${second.dataSource.password}")
private String password;
@Value("${second.dataSource.driver-class-name}")
private String driverClassName;
@Bean("secondDataSource")
public DataSource getSecondDataSource(){
HikariDataSource dataSource = new HikariDataSource();
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDriverClassName(driverClassName);
dataSource.setJdbcUrl(url);
return dataSource;
}
@Bean("secondTransactionManager")
public TransactionManager getSecondTransactionManager(){
return new DataSourceTransactionManager
( getSecondDataSource());
}
@Bean("secondSqlSessionFactory")
public SqlSessionFactory secondSqlSessionFactory(@Qualifier("secondDataSource") DataSource secondDataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(secondDataSource);
sqlSessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver()
.getResources(MAPPER_LOCATION)
);
return sqlSessionFactory.getObject();
}
}