springboot多数据源

8 篇文章 0 订阅
4 篇文章 0 订阅

springboot多数据源

参考:https://blog.csdn.net/taojin12/article/details/88399177

1、配置application.yml

多数据源可以配置不同类型的数据库,如oracle和mysql如下

spring:
  datasource:
    main:
      driver-class-name: oracle.jdbc.driver.OracleDriver
      jdbc-url: jdbc:oracle:thin:@127.0.0.1:1521:TESTDB
      username: root
      password: root
    other:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
      username: root
      password: 123456

注意: 与单数据源不同,在datasource后需要给每个数据源命名,并且将url改为jdbc-url

2、Mapper目录

根据数据源将mapper.java和mapper.xml区分开

在这里插入图片描述 在这里插入图片描述

3、配置DataSourceConfig配置文件

  • 配置文件中配置 @MapperScan 后,不需要额外在启动类中配置
  • 注解 @basePackages 指明 Mapper 地址
  • 注解 @sqlSessionTemplateRef 指定 Mapper 路径下注入的 sqlSessionTemplate。
  • 如果用myBatis, SqlSessionFactory 部分可以使用SqlSessionFactoryBean来生成。但是如果用mybatis plus一定要用MybatisSqlSessionFactoryBean 来生成SqlSessionFactory。否则会报错 ,无法直接通过BaseMapper去调用查询。
1.DataSourceMainConfig
/**
 * @Description : 主数据源配置
 * @Author : SherlockerSun
 * @Date : 2022/3/23 10:10
 */
@Configuration
@MapperScan(basePackages = {"com.springboot.test.demo.dao.main"}, sqlSessionTemplateRef = "mainSqlSessionTemplate")
public class DataSourceMainConfig {

    //首先加载配置的数据源:
    @Bean(name = "mainDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.main")
    @Primary
    public DataSource mainDataSource() {
        return DataSourceBuilder.create().build();
    }

    //根据创建的数据源,构建对应的 SqlSessionFactory。
    @Bean(name = "mainSqlSessionFactory")
    @Primary
    public SqlSessionFactory mainSqlSessionFactory(@Qualifier("mainDataSource") DataSource dataSource) throws Exception {
        //mybatis-plus使用MybatisSqlSessionFactoryBean,普通使用SqlSessionFactoryBean
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/oracle/main/**/*.xml"));
        return bean.getObject();
    }

    //同时将数据源添加到事务中。
    @Bean(name = "mainTransactionManager")
    @Primary
    public DataSourceTransactionManager mainTransactionManager(@Qualifier("mainDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    //接下来将上面创建的 SqlSessionFactory 注入,创建我们在 Mapper 中需要使用的 SqlSessionTemplate。
    @Bean(name = "mainSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate mainSqlSessionTemplate(@Qualifier("mainSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
2.DataSourceOtherConfig

DataSourceOtherConfig的配置和上面类似,方法上需要去掉 @Primary 注解,替换对应的数据源和 Mapper 路径即可

/**
 * @Description : 其他数据源配置
 * @Author : SherlockerSun
 * @Date : 2022/3/23 10:10
 */
@Configuration
@MapperScan(basePackages = {"com.springboot.test.demo.dao.other"}, sqlSessionTemplateRef = "otherSqlSessionTemplate")
public class DataSourceOtherConfig {

    //首先加载配置的数据源:
    @Bean(name = "otherDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.other")
    public DataSource otherDataSource() {
        return DataSourceBuilder.create().build();
    }

    //根据创建的数据源,构建对应的 SqlSessionFactory。
    @Bean(name = "otherSqlSessionFactory")
    public SqlSessionFactory otherSqlSessionFactory(@Qualifier("otherDataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/oracle/other/**/*.xml"));
        return bean.getObject();
    }

    //同时将数据源添加到事务中。
    @Bean(name = "otherTransactionManager")
    public DataSourceTransactionManager otherTransactionManager(@Qualifier("otherDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    //接下来将上面创建的 SqlSessionFactory 注入,创建我们在 Mapper 中需要使用的 SqlSessionTemplate。
    @Bean(name = "otherSqlSessionTemplate")
    public SqlSessionTemplate otherSqlSessionTemplate(@Qualifier("otherSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

4、使用

直接在service中调用对应的mapper就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SherlockerSun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值