本文章使用SpringBoot版本是1.5.3.RELEASE
老规矩还是先贴项目结构:
业务代码部分不做过多说明,下面主要讲解配置文件:
1.yml文件
server:
port: 8072
spring:
datasource:
test1:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test1
username: root
password: root
test2:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test2
username: root
password: root
mybatis:
type-aliases-package: com.demo.User1.User1
mapper-locations:
- mapper/*
2.主数据源配置
// 表示这个类为一个配置类
@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.demo.mapper.test1mapper", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class test1DataSourcConfig {
// 将这个对象放入Spring容器中
@Bean(name = "test1DataSource")
// 表示这个数据源是默认数据源
@Primary
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource test1DataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "test1SqlSessionFactory")
// 表示这个数据源是默认数据源
@Primary
// @Qualifier表示查找Spring容器中名字为test1DataSource的对象
public SqlSessionFactory test1SqlSessionFactory(@Qualifier("test1DataSource")DataSource datasource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test1/*.xml"));
return bean.getObject();
}
@Bean("test1SqlSessionTemplate")
// 表示这个数据源是默认数据源
@Primary
@Qualifier("test1SqlSessionFactory")
public SqlSessionTemplate test1sqlsessiontemplate(SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
3.从数据源配置
@Configuration
@MapperScan(basePackages = "com.demo.mapper.test2mapper", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class test2DataSourcConfig {
@Bean(name = "test2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test2")
public DataSource test2DateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "test2SqlSessionFactory")
public SqlSessionFactory test2SqlSessionFactory(@Qualifier("test2DataSource")DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test2/*.xml"));
return bean.getObject();
}
@Bean("test2SqlSessionTemplate")
@Qualifier("test2SqlSessionFactory")
public SqlSessionTemplate test2sqlsessiontemplate(SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
下面可以做一个简单的试验,test1和test2是我事先准备好的两个不同的库:
通过请求两个接口,可以看到从不同的库中拿到了对应的数据
本篇文章代码已上传至github,有需要的同学可自行前往查看或下载!