当前位置: 首页 > news >正文

Springboot-mybatis配置多数据源

配置多数据源

    • 1. 配置文件
    • 2. 编写配置类

1. 配置文件

先在配置文件中定义数据库连接的基本信息,我这里是举例子所以设定了两个MySQL数据库。一般是支持同时配置不同数据库的

spring:
  datasource:
    # 本地数据库
    local:
      driver-class-name: com.mysql.cj.jdbc.Driver
      # jdbcUrl是Hikari连接池默认的url(依赖版本4.0.3不同版本可能不同),其他的可能不叫这个名字,具体可以上网查找名称
      jdbcUrl: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL&useAffectedRows=true&allowPublicKeyRetrieval=true
      username: root
      password: 123456
    # 人事dev数据库
    oms:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbcUrl: jdbc:mysql://192.168.50.21:3306/db2?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&lowerCaseTableNames=1
      username: root
      password: 234567

2. 编写配置类

在写完配置文件之后,我们需要写相应的配置类去读取数据库的连接信息。
配置类1

@Configuration
@MapperScan(basePackages = "com.sykmi.local_dao.local",
        sqlSessionFactoryRef = "LocalSqlSessionFactory")
public class LocalDataSourceConfig {

    @Bean(name = "LocalDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.local")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "LocalSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(
            @Qualifier("LocalDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver()
                        .getResources("classpath:mapper/local/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "LocalTransactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(
            @Qualifier("LocalDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

配置类2

@Configuration  //代表该类为配置类
@MapperScan(basePackages = "com.sykmi.local_dao.oms",
        sqlSessionFactoryRef = "OmsSqlSessionFactory") //扫描指定的包,将包中的mapper接口关联到OmsSqlSessionFactory上
public class OmsDataSourceConfig {

	// 表示去配置文件找到spring.datasource.oms前缀(yml或properties配置文件)下的配置信息并按照读取到的信息创建数据源,bean的名称叫OmsDataSource
    @Bean(name = "OmsDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.oms")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

	// 生成SqlSessionFactory 
    @Bean(name = "OmsSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(
            @Qualifier("OmsDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);// 绑定数据源
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver()
                        .getResources("classpath:mapper/oms/*.xml"));// 指定 XML 映射文件路径
        return bean.getObject();
    }

	// 配置事务管理器  多数据源情况下可以给默认的事务管理器额外打个@Primary注解(参考上面LocalDataSourceConfig类),剩余的就像
	// 这样起名字即可(建议),在使用不同的数据源时如果遇到需要事务的情况下建议显式指定事务
	// 管理器,如@Transactional(value = "事务管理器名称")
	// tips:如果一个方法逻辑内调用了不同的数据源写入不同数据库,考虑使用分布式事务
    @Bean(name = "OmsTransactionManager")
    public DataSourceTransactionManager transactionManager(
            @Qualifier("OmsDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

可以大致看一下OMS数据源配置类的注释,基本都写了这个配置类做了什么

相关文章:

  • 加油站小程序实战教程09显示站点信息
  • Z字形字符串转换力扣6
  • 网站总报SSL错误?常见原因及解决方案
  • 开启mysql远程登录
  • 面试过了,总结测试工程师面试题(含答案)
  • 【Git原理与使用二】Git 分支管理
  • 深度学习(斋藤康毅)学习笔记(六)反向传播3
  • 面试中常问的mysql数据库指令【杭州多测师_王sir】
  • 盛铂科技 FlexDDS - NG波形发生器(直接数字信号合成器(DDS)):量子光学研究的得力助手
  • HTML学习笔记(全)
  • 第三章:go 依赖管理 go get / go get tidy
  • Windows应用访问 WSL中服务的5 种选择方案
  • 第一:goland安装
  • 嵌入式开发之串行数据处理
  • 计算机毕业设计SpringBoot+Vue.js疗养院管理系统(源码+文档+PPT+讲解)
  • AI如何重塑运维体系
  • fastapi房产销售系统
  • Elastic如何获取当前系统时间
  • Vue项目通过内嵌iframe访问另一个vue页面,获取token适配后端鉴权(以内嵌若依项目举例)
  • uniapp 微信小程序 升级 uniad插件版本号
  • 做彩票网站都是怎么拉人的/竞价推广培训课程
  • 网站被入侵后需做的检测 1/百度推广登录入口官网网址
  • 附近哪里有建筑模板卖/2020站群seo系统
  • wordpress播放歌/seo怎么做?
  • 深圳本地网站建设/百度站长工具
  • 濮阳网站/网站seo服务商