前言:
这里大概说一下如何实现,通过@MapperScan() 扫描不同包,动态切换不同数据源,是很简单哈!
1、引入依赖
// mybatis 依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
// druid 数据源
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
//SqlServer
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
// 这里,如果你引入了springboot-dependencies依赖 下面两个可以直接引用
// mysql
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
// Oracle
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
2、编写配置
application.yml配置:
db0: # 数据源1 --oracle
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db0?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false&allowMultiQueries=true&&serverTimezone=UTC
username: xx
password: xxxxx
db1: # 数据源1 --oracle
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@//localhost:1521/db0
username: xx
password: xxxxx
db2: # 数据源2 --sqlserver
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://localhost:1433;DataBaseName=db0
username: xx
password: xxxxx
数据库连接配置:
<1>mysqlConfig
@Configuration
@MapperScan(basePackages = MysqlDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDataSourceConfig {
/**
* 精确到 mysql 目录,以便跟其他数据源隔离
*
*/
static final String PACKAGE = "com.xxx.demo.mapper.mysqlmapper";//对应的mysql dao层包
static final String MAPPER_LOCATION = "classpath:mapper/mysqlmapper/*.xml";//对应mysql的mapper.xml文件
@Value("${spring.datasource.db0.url}")
private String url;
@Value("${spring.datasource.db0.username}")
private String user;
@Value("${spring.datasource.db0.password}")
private String password;
@Value("${spring.datasource.db0.driver-class-name}")
private String driverClass;
@Bean(name = "mysqlDataSource")
public DataSource mysqlDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "mysqlTransactionManager")
public DataSourceTransactionManager mysqlTransactionManager() {
return new DataSourceTransactionManager(mysqlDataSource());
}
@Bean(name = "mysqlSqlSessionFactory")
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource mysqlDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(mysqlDataSource);
sessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources(MysqlDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
<2>OracleConfig
@Configuration
@MapperScan(basePackages = OracleDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDataSourceConfig {
// 精确到 oracle 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.xxx.demo.mapper.oraclemapper";
static final String MAPPER_LOCATION = "classpath:mapper/oraclemapper/*.xml"; //对应mysql的mapper.xml文件
@Value("${spring.datasource.db1.url}")
private String url;
@Value("${spring.datasource.db1.username}")
private String user;
@Value("${spring.datasource.db1.password}")
private String password;
@Value("${spring.datasource.db1.driver-class-name}")
private String driverClass;
@Bean(name = "oracleDataSource")
public DataSource oracleDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "oracleTransactionManager")
public DataSourceTransactionManager oracleTransactionManager() {
return new DataSourceTransactionManager(oracleDataSource());
}
@Bean(name = "oracleSqlSessionFactory")
public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource oracleDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(oracleDataSource);
sessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources(OracleDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
<3>SqlServer,@Primary这里默认选择
@Configuration
@MapperScan(basePackages = SqlServerDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "sqlSqlSessionFactory")
public class SqlServerDataSourceConfig {
static final String PACKAGE = "com.xxx.demo.mapper.sqlmapper";
static final String MAPPER_LOCATION = "classpath:mapper/sqlmapper/*.xml"; //对应mysql的mapper.xml文件
@Value("${spring.datasource.db2.url}")
private String url;
@Value("${spring.datasource.db2.username}")
private String user;
@Value("${spring.datasource.db2.password}")
private String password;
@Value("${spring.datasource.db2.driver-class-name}")
private String driverClass;
@Bean(name = "sqlDataSource")
@Primary
public DataSource mysqlDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "sqlTransactionManager")
@Primary
public DataSourceTransactionManager sqlTransactionManager() {
return new DataSourceTransactionManager(mysqlDataSource());
}
@Bean(name = "sqlSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSqlSessionFactory(@Qualifier("sqlDataSource") DataSource sqlDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(sqlDataSource);
sessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources(SqlServerDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
到此结束!求赞,欢迎留言!!!