思路:
通常一个数据源是一个mapper接口包,一个mapper XML包.
我想法是一个两个mapper包对应两个xml包分别对应两个数据库
下面上代码:
maven 包我就不放了 你单数据源能连上 这个就能连上
yml 配置文件里面配置端口号 配置2个数据源 不用配置mybatis
#配置端口号
server:
port: 8080
#配置主数据源
spring:
datasource.one:
driver-class-name: oracle.jdbc.driver.OracleDriver
jdbc-url: jdbc:oracle:thin:@127.0.0.1:1521:kdmins
username: 123123
password: 123
#配置第二个数据源
datasource.two:
driver-class-name: oracle.jdbc.driver.OracleDriver
jdbc-url: jdbc:oracle:thin:@192.168.1.2:1521:kdmins1
username: 123123
password: 123
第二步:
创建一个config包:
创建两个类
DataSourceConfigOne
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
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 javax.sql.DataSource;
//表示这个类为一个配置类
@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.kdmins.mapper.test1", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class DataSourceConfigOne {
// 将这个对象放入Spring容器中
@Bean(name = "test1DataSource")
// 表示这个数据源是默认数据源
@Primary
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.one")
public DataSource getDateSource1() {
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"));
//设置config 文件 没有就把这行代码注掉
bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:config/mybatis-config.xml"));
//bean.setConfigLocation(new ("classpath:config/mybatis-config.xml"));
return bean.getObject();
}
@Bean("test1SqlSessionTemplate")
// 表示这个数据源是默认数据源
@Primary
public SqlSessionTemplate test1sqlsessiontemplate(
@Qualifier("test1SqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
DataSourceConfigTwo:
@Configuration
@MapperScan(basePackages = "com.kdmins.mapper.test2", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class DataSourceConfigTwo {
@Bean(name = "test2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.two")
public DataSource getDateSource2() {
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"));
//设置config 文件
bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:config/mybatis-config.xml"));
return bean.getObject();
}
@Bean("test2SqlSessionTemplate")
public SqlSessionTemplate test2sqlsessiontemplate(
@Qualifier("test2SqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
第一个里面都有注释 很详细了,一个一个对应就能理解
第三步:
分别创建两个mapper:
resources 下面xml文件:
然后和平时一样 第一个mapper里面写接口就是调用的第一个数据源,第二个文件里面写接口就是调用的第二个数据源
类里面@Autowired 注入就行了
注意: 第一次使用建议不要修改名字,先测试成功再说
yml 里面一定是jdbc-url 具体请百度