千家信息网

怎么使用SpringBoot配置多数据源

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了怎么使用SpringBoot配置多数据源的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用SpringBoot配置多数据源文章都会有所收获,下面我们
千家信息网最后更新 2026年11月02日怎么使用SpringBoot配置多数据源

这篇文章主要介绍了怎么使用SpringBoot配置多数据源的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用SpringBoot配置多数据源文章都会有所收获,下面我们一起来看看吧。

1. 引入jar包

pom.xml文件

    4.0.0            org.springframework.boot        spring-boot-starter-parent        2.5.6                 com.multi.datasource    demo    0.0.1-SNAPSHOT    demo    Demo project for Spring Boot            1.8                            org.springframework.boot            spring-boot-starter                            org.springframework.boot            spring-boot-starter-web                            org.mybatis.spring.boot            mybatis-spring-boot-starter            1.3.2                            com.alibaba            druid            1.1.8                            mysql            mysql-connector-java                            org.projectlombok            lombok            1.16.22                            org.springframework.boot            spring-boot-starter-test            test                                                    org.springframework.boot                spring-boot-maven-plugin                                                                                        org.projectlombok                            lombok                                                                                    

2. properties配置

分别准备两个数据源

server.port=18888mybatis.mapper-locations=classpath:mapper/*.xmlmy1.datasource.url=jdbc:mysql://10.0.0.125:3306/wyl?autoReconnect=truemy1.datasource.driverClassName=com.mysql.cj.jdbc.Drivermy1.datasource.username=rootmy1.datasource.password=123456my2.datasource.url=jdbc:mysql://10.0.0.160:3306/wyl?autoReconnect=truemy2.datasource.driverClassName=com.mysql.cj.jdbc.Drivermy2.datasource.username=rootmy2.datasource.password=123456

3. 分别配置两个数据源

第一个数据源

package com.multi.datasource.config;import com.alibaba.druid.pool.DruidDataSource;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.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration@MapperScan(basePackages = My1DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "my1SqlSessionFactory")public class My1DataSourceConfig {    static final String PACKAGE = "com.multi.datasource.dao.my1";    static final String MAPPER_LOCATION = "classpath:mapper/*.xml";    @Value("${my1.datasource.url}")    private String url;    @Value("${my1.datasource.username}")    private String user;    @Value("${my1.datasource.password}")    private String password;    @Value("${my1.datasource.driverClassName}")    private String driverClass;    @Bean(name = "my1DataSource")    public DataSource my1DataSource() {        DruidDataSource dataSource = new DruidDataSource();        dataSource.setDriverClassName(driverClass);        dataSource.setUrl(url);        dataSource.setUsername(user);        dataSource.setPassword(password);        dataSource.setMaxWait(Integer.MAX_VALUE);        dataSource.setTestOnBorrow(true);        dataSource.setTestOnReturn(true);        dataSource.setTestWhileIdle(true);        return dataSource;    }    @Bean(name = "my1TransactionManager")    public DataSourceTransactionManager my1TransactionManager() {        return new DataSourceTransactionManager(my1DataSource());    }    @Bean(name = "my1SqlSessionFactory")    public SqlSessionFactory my1SqlSessionFactory(@Qualifier("my1DataSource") DataSource my1DataSource)            throws Exception {        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();        sessionFactory.setDataSource(my1DataSource);        sessionFactory.setMapperLocations(                new PathMatchingResourcePatternResolver().getResources(My1DataSourceConfig.MAPPER_LOCATION));        return sessionFactory.getObject();    }}

第二个数据源

package com.multi.datasource.config;import com.alibaba.druid.pool.DruidDataSource;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.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration@MapperScan(basePackages = My1DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "my1SqlSessionFactory")public class My1DataSourceConfig {    static final String PACKAGE = "com.multi.datasource.dao.my1";    static final String MAPPER_LOCATION = "classpath:mapper/*.xml";    @Value("${my1.datasource.url}")    private String url;    @Value("${my1.datasource.username}")    private String user;    @Value("${my1.datasource.password}")    private String password;    @Value("${my1.datasource.driverClassName}")    private String driverClass;    @Bean(name = "my1DataSource")    public DataSource my1DataSource() {        DruidDataSource dataSource = new DruidDataSource();        dataSource.setDriverClassName(driverClass);        dataSource.setUrl(url);        dataSource.setUsername(user);        dataSource.setPassword(password);        dataSource.setMaxWait(Integer.MAX_VALUE);        dataSource.setTestOnBorrow(true);        dataSource.setTestOnReturn(true);        dataSource.setTestWhileIdle(true);        return dataSource;    }    @Bean(name = "my1TransactionManager")    public DataSourceTransactionManager my1TransactionManager() {        return new DataSourceTransactionManager(my1DataSource());    }    @Bean(name = "my1SqlSessionFactory")    public SqlSessionFactory my1SqlSessionFactory(@Qualifier("my1DataSource") DataSource my1DataSource)            throws Exception {        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();        sessionFactory.setDataSource(my1DataSource);        sessionFactory.setMapperLocations(                new PathMatchingResourcePatternResolver().getResources(My1DataSourceConfig.MAPPER_LOCATION));        return sessionFactory.getObject();    }}

4. Dao目录

为了区分两个数据源,分别设置了不同的目录

package com.multi.datasource.dao.my1;import com.multi.datasource.entity.UserEntity;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface Test1Mapper {        UserEntity query();    }
package com.multi.datasource.dao.my2;import com.multi.datasource.entity.UserEntity;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface Test2Mapper {        UserEntity query();    }

5. Entity

package com.multi.datasource.entity;import lombok.Data;@Datapublic class UserEntity {    private String userName;}

6. Mapper文件

从my1数据源查询

        

从my2数据源查询

            

7. Controller测试

package com.multi.datasource.controller;import com.multi.datasource.dao.my1.Test1Mapper;import com.multi.datasource.dao.my2.Test2Mapper;import com.multi.datasource.entity.UserEntity;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestControllerpublic class TestController {    @Resource    private Test1Mapper test1Mapper;    @Resource    private Test2Mapper test2Mapper;    @RequestMapping("query")    public void query() {        UserEntity user1 = test1Mapper.query();        System.out.println("my1 dataSource:" + user1);        UserEntity user2 = test2Mapper.query();        System.out.println("my2 dataSource:" + user2);    }}

两个数据源,对应的user_name分别是zhangsan和lisi

8. 结果验证

访问 http://localhost:18888/query,结果如下

关于"怎么使用SpringBoot配置多数据源"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"怎么使用SpringBoot配置多数据源"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

数据 数据源 配置 两个 知识 内容 文件 目录 篇文章 结果 查询 不同 价值 操作简单 文章 易懂 更多 看吧 行业 资讯 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京路客互联网科技有限公司 新华互联网科技学校 北京互联网科技有限公司 苏州互联网科技贷款公司 上海致骋互联网科技 互联网金融和金融科技 互联网科技有限公司 翻译 金融科技和互联网金融 宁波青枫互联网科技有限公司 互联网科技革命什么开始 花神(南京)互联网科技有限公司 西安小鹰速贷互联网科技有限公司 元气玛特互联网科技公司是外包吗 黑云互联网科技有限公司 宇信科技在杭州互联网排第几 广东鹅鹅鹅互联网科技有限公司 互联网科技对化妆品行业 互联网大会出现的黑科技 科技美学互联网 艺术 互联网科技企业文化 工业互联网科技新基建 猪兼强互联网科技 广州宏创互联网科技 壹账通互联网科技 福州新华互联网科技学校 知乎 来此购互联网科技有限公司 昆明中奇联合互联网科技 萌小萌互联网科技河南有限公司 福州德业互联网科技 互联网科技快速发展优美句子
0