Spring Boot 双数据源

本文详述如何在Spring Boot环境下配置并使用两个独立的数据源,通过MyBatis进行数据库操作。涵盖YML配置、数据源配置类、Mapper接口及XML文件的设置,实现多数据源的高效管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:
通常一个数据源是一个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 具体请百度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值