使用Spring Boot + MyBatis实现多数据源

一、引言

在开发中,我们经常会遇到需要连接多个数据库的情况。使用Spring Boot和MyBatis框架可以很方便地实现多数据源的配置和使用。本文将详细介绍如何在Spring Boot项目中使用多数据源。

二、实操

1、添加所需的依赖:

XML 复制代码
<!-- Spring Boot Starter for MyBatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
<!-- 数据库驱动依赖 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>
<!-- 其他数据库驱动依赖 -->
...

2、配置数据源和MyBatis会话工厂:

application.propertiesapplication.yml 文件中配置主数据源:

XML 复制代码
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

建一个类来配置第二个数据源和MyBatis会话工厂,例如 SecondaryDataSourceConfig

java 复制代码
@Configuration
@MapperScan(basePackages = "com.example.secondary", sqlSessionTemplateRef = "secondarySqlSessionTemplate")
public class SecondaryDataSourceConfig {

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

    @Bean(name = "secondarySqlSessionFactory")
    public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(secondaryDataSource);
        return sessionFactory.getObject();
    }

    @Bean(name = "secondarySqlSessionTemplate")
    public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

application.propertiesapplication.yml 文件中配置第二个数据源:

java 复制代码
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db2
spring.datasource.secondary.username=root
spring.datasource.secondary.password=password
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver

3、创建两个数据库对应的Mapper接口和Mapper XML文件:

主数据源的Mapper接口、Mapper XML文件:

java 复制代码
package com.example.primary;

// import语句

@Mapper
public interface PrimaryMapper {
    // 方法定义
}
XML 复制代码
<!-- primary-mapper.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.primary.PrimaryMapper">
    <!-- SQL语句定义 -->
</mapper>

第二个数据源的Mapper接口、Mapper XML文件与上面类似,只需将包名、namespace和SQL语句替换为对应的内容。

使用多数据源:

在需要使用主数据源的地方注入 PrimaryMapper

java 复制代码
@Autowired
private PrimaryMapper primaryMapper;

在需要使用第二个数据源的地方注入 SecondaryMapper

java 复制代码
@Autowired
private SecondaryMapper secondaryMapper;

这样,你就可以在Spring Boot项目中使用多个数据源并使用MyBatis进行数据库操作了。需要注意的是,上述示例中使用了两个数据源,你可以根据自己的需求配置更多的数据源,只需按照类似的方式添加配置和代码。

相关推荐
一过菜只因2 分钟前
JavaWeb后端(spring--boot)
java·开发语言
yuyu_030411 分钟前
SOHE智能厨余垃圾处理系统
java·vue
IT枫斗者13 分钟前
Netty的原理和springboot项目整合
java·spring boot·后端·sql·科技·mysql·spring
Edward1111111115 分钟前
普通java项目转为maven项目 J文件后缀.java变C文件
java·开发语言·maven
一雨方知深秋19 分钟前
二.java程序基本语法
java·类型转换·变量·方法·运算符·字面量·关键字标识符
Java程序之猿24 分钟前
Springboot 集成apache-camel +mqtt 根据主题处理mqtt消息
java·spring boot·后端
悟空码字1 小时前
SpringBoot 整合 ElasticSearch,给搜索插上“光速翅膀”
java·后端·elasticsearch
骚戴1 小时前
DeepSeek V3 & Llama 3 推理避坑指南:自建 vLLM 集群 vs API 网关架构深度对比
java·人工智能·python·大模型·api·vllm
墨雪不会编程1 小时前
C++基础语法篇八 ——【类型转换、再探构造、友元】
java·开发语言·c++
老毛肚1 小时前
登录架构设计
java·开发语言