千家信息网

springboot 中怎么利用mybatis实现多数据源

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇文章给大家分享的是有关springboot 中怎么利用mybatis实现多数据源,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。需求项
千家信息网最后更新 2025年12月03日springboot 中怎么利用mybatis实现多数据源

本篇文章给大家分享的是有关springboot 中怎么利用mybatis实现多数据源,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

需求

项目有一个需求,需要从多数据源读取数据。因此使用springboot+mybatis进行多数据源配置和操作。

依赖引入

                            org.mybatis.spring.boot            mybatis-spring-boot-starter            1.3.2                            mysql            mysql-connector-java            8.0.13        

配置文件

# ds1数据源配置spring.datasource.ds1.url=jdbc:mysql://ip1:port/database?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8spring.datasource.ds1.username=xxxxxxspring.datasource.ds1.password=xxxxxxspring.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver# ds2数据源配置spring.datasource.ds2.url=jdbc:mysql://ip2:port/database?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8spring.datasource.ds2.username=xxxxxxspring.datasource.ds2.password=xxxxxxspring.datasource.ds2.driver-class-name=com.mysql.cj.jdbc.Driver# ds3数据源配置spring.datasource.ds3.url=jdbc:mysql://ip3:port/database?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8spring.datasource.ds3.username=xxxxxxspring.datasource.ds3.password=xxxxxxspring.datasource.ds3.driver-class-name=com.mysql.cj.jdbc.Driver

Java配置

package com.qishu.demo.config;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;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@MapperScan(basePackages = "com.qishu.demo.ds1.dao", sqlSessionFactoryRef = "ds1SqlSessionFactory")public class Ds1DatasourceConfig {    @Primary    @Bean(name = "ds1DataSource")    @ConfigurationProperties("spring.datasource.ds1")    public DataSource masterDataSource() {        return DataSourceBuilder.create().build();    }    @Primary    @Bean(name = "ds1SqlSessionFactory")    public SqlSessionFactory sqlSessionFactory(@Qualifier("ds1DataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();        sessionFactoryBean.setDataSource(dataSource);        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()                .getResources("classpath:ds1-mapper/*.xml"));        return sessionFactoryBean.getObject();    }}
package com.qishu.demo.config;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;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// 扫描的包路径@MapperScan(basePackages = "com.qishu.demo.ds2.dao", sqlSessionFactoryRef = "ds2SqlSessionFactory")public class Ds2DatasourceConfig {    @Bean(name = "ds2DataSource")    // 配置前缀    @ConfigurationProperties("spring.datasource.ds2")    public DataSource masterDataSource() {        return DataSourceBuilder.create().build();    }    @Bean(name = "ds2SqlSessionFactory")    public SqlSessionFactory sqlSessionFactory(@Qualifier("ds2DataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();        sessionFactoryBean.setDataSource(dataSource);        // mapper文件目录        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()                .getResources("classpath:ds2-mapper/*.xml"));        return sessionFactoryBean.getObject();    }}

ds3就不写了

使用方式

    @Autowired    private AppDAO appDAO;

修改启动类

// 排除自动注册配置@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})

单元测试

// EnableAutoConfiguration注解,关闭springBoot关于mybatis的一些自动注入。@RunWith(SpringRunner.class)@SpringBootTest(classes = Application.class)@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})public class AppDAOTest {    @Autowired    private AppDAO appDAO;    @Test    public void selectTest() {        AppDO appDO = appDAO.selectByPrimaryKey(70);        System.out.println(JSON.toJSONString(appDO));    }}

目录结构

以上就是springboot 中怎么利用mybatis实现多数据源,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

0