返回顶部
首页 > 资讯 > 精选 >SpringBoot如何搭建多数据源
  • 638
分享到

SpringBoot如何搭建多数据源

2023-06-21 23:06:46 638人浏览 安东尼
摘要

这篇文章主要为大家展示了“SpringBoot如何搭建多数据源”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springBoot如何搭建多数据源”这篇文章吧。首先我们建立两个数据库(可以不在同一

这篇文章主要为大家展示了“SpringBoot如何搭建多数据源”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springBoot如何搭建多数据源”这篇文章吧。

首先我们建立两个数据库(可以不在同一台电脑上):

multiple_order

DROP DATABASE IF EXISTS `multiple_order`;CREATE DATABASE `multiple_order`;USE `multiple_order`;CREATE TABLE `order` (    `order_id` BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '订单id',    `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户id',    `cost` DECIMAL(13, 2) COMMENT '订单费用') COMMENT '订单表';

multiple_user

DROP DATABASE IF EXISTS `multiple_user`;CREATE DATABASE `multiple_user`;USE `multiple_user`;CREATE TABLE `user` (    `user_id` BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '用户id',    `username` VARCHAR(50) NOT NULL COMMENT '用户名',    `age` TINYINT UNSIGNED COMMENT '年龄') COMMENT '用户表';

然后创建一个Maven项目,其中 pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="Http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <!-- SpringBoot的夫项目 -->    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.3.9.RELEASE</version>    </parent>    <groupId>love.xiaohh.datasource</groupId>    <artifactId>multiple-datasources</artifactId>    <version>1.0-SNAPSHOT</version>    <properties>        <maven.compiler.source>8</maven.compiler.source>        <maven.compiler.target>8</maven.compiler.target>    </properties>    <dependencies>        <!-- springMVC 相关的依赖 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-WEB</artifactId>        </dependency>        <!-- Spring 健康检测模块 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>        <!-- mybatis 相关依赖 -->        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>2.2.0</version>        </dependency>        <!-- MySQL 驱动 -->        <dependency>            <groupId>Mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <!-- JSON 工具类 -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.78</version>        </dependency>    </dependencies>    <build>        <plugins>            <!-- 制作一个可运行的 jar 包需要的插件 -->            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

application.yml 中需要配置两个数据源:

spring:  datasource:    # 用户模块数据库配置    user:      driver-class-name: com.mysql.cj.jdbc.Driver      jdbc-url: jdbc:mysql://127.0.0.1:3306/multiple_user?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8      username: root      passWord: xiaohh    # 订单模块数据库配置    order:      driver-class-name: com.mysql.cj.jdbc.Driver      jdbc-url: jdbc:mysql://127.0.0.1:3306/multiple_order?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8      username: root      password: xiaohhmybatis:  # Mapper 的目录  mapper-locations: classpath:mapper*Mapper.xml

然后我们定义一个配置类 DataSourseConfig 用于配置多数据源,首先是申明数据源,按照 application.yml 当中的配置定义两个数据源,注意当中的DataSource 是 javax.sql.DataSource

@Primary // 需要一个默认配置的数据源@Bean("user")@ConfigurationProperties(prefix = "spring.datasource.user") // 在yml中配置数据源的前缀public DataSource user() {    return DataSourceBuilder.create().build();}@Bean("order")@ConfigurationProperties(prefix = "spring.datasource.order") // 在yml中配置数据源的前缀public DataSource order() {    return DataSourceBuilder.create().build();}

然后创建 SqlSessionFactory

@Primary // 配置一个这个类型默认的 bean@Bean("userSqlSessionFactory")public SqlSessionFactory userSqlSessionFactory(@Qualifier("user") DataSource user) throws Exception {    // 创建bean    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();    // 设置数据源    factory.setDataSource(user);    // 设置 mapper 文件的扫描    factory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/user@Bean("orderSqlSessionFactory")public SqlSessionFactory orderSqlSessionFactory(@Qualifier("order") DataSource order) throws Exception {    // 创建bean    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();    // 设置数据源    factory.setDataSource(order);    // 设置 mapper 文件的扫描    factory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/order@Primary // 设置这个类型默认的 bean@Bean("userSqlSessionTemplate")public SqlSessionTemplate userSqlSessionTemplate(@Qualifier("userSqlSessionFactory") SqlSessionFactory userSqlSessionFactory) {    return new SqlSessionTemplate(userSqlSessionFactory);}@Bean("orderSqlSessionTemplate")public SqlSessionTemplate orderSqlSessionTemplate(@Qualifier("orderSqlSessionFactory") SqlSessionFactory orderSqlSessionFactory) {    return new SqlSessionTemplate(orderSqlSessionFactory);}

最后别忘了在配置类上加上一个注解,用于声明哪些Mapper文件用哪些注解:

@Configuration@MapperScans({        // basePackages 是mapper的包路径,sqlSessionTemplateRef 是指定我们创建的 SqlSessionTemplate        @MapperScan(basePackages = "love.xiaohh.datasource.mapper.user", sqlSessionTemplateRef = "userSqlSessionTemplate"),        @MapperScan(basePackages = "love.xiaohh.datasource.mapper.order", sqlSessionTemplateRef = "orderSqlSessionTemplate")})

完整的 DataSourceConfig 类的代码:

package love.xiaohh.datasource.config;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.mybatis.spring.annotation.MapperScan;import org.mybatis.spring.annotation.MapperScans;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@MapperScans({        // basePackages 是mapper的包路径,sqlSessionTemplateRef 是指定我们创建的 SqlSessionTemplate        @MapperScan(basePackages = "love.xiaohh.datasource.mapper.user", sqlSessionTemplateRef = "userSqlSessionTemplate"),        @MapperScan(basePackages = "love.xiaohh.datasource.mapper.order", sqlSessionTemplateRef = "orderSqlSessionTemplate")})public class DataSourceConfig {        @Primary // 需要一个默认配置的数据源    @Bean("user")    @ConfigurationProperties(prefix = "spring.datasource.user") // 在yml中配置数据源的前缀    public DataSource user() {        return DataSourceBuilder.create().build();    }        @Bean("order")    @ConfigurationProperties(prefix = "spring.datasource.order") // 在yml中配置数据源的前缀    public DataSource order() {        return DataSourceBuilder.create().build();    }        @Primary // 配置一个这个类型默认的 bean    @Bean("userSqlSessionFactory")    public SqlSessionFactory userSqlSessionFactory(@Qualifier("user") DataSource user) throws Exception {        // 创建bean        SqlSessionFactoryBean factory = new SqlSessionFactoryBean();        // 设置数据源        factory.setDataSource(user);        // 设置 mapper 文件的扫描        factory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/user    @Bean("orderSqlSessionFactory")    public SqlSessionFactory orderSqlSessionFactory(@Qualifier("order") DataSource order) throws Exception {        // 创建bean        SqlSessionFactoryBean factory = new SqlSessionFactoryBean();        // 设置数据源        factory.setDataSource(order);        // 设置 mapper 文件的扫描        factory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/order    @Primary // 设置这个类型默认的 bean    @Bean("userSqlSessionTemplate")    public SqlSessionTemplate userSqlSessionTemplate(@Qualifier("userSqlSessionFactory") SqlSessionFactory userSqlSessionFactory) {        return new SqlSessionTemplate(userSqlSessionFactory);    }        @Bean("orderSqlSessionTemplate")    public SqlSessionTemplate orderSqlSessionTemplate(@Qualifier("orderSqlSessionFactory") SqlSessionFactory orderSqlSessionFactory) {        return new SqlSessionTemplate(orderSqlSessionFactory);    }}

然后按照注解上面定义的包创建两个 Mapper 接口

OrderMapper

package love.xiaohh.datasource.mapper.order;import love.xiaohh.datasource.entities.order.Order;import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapperpublic interface OrderMapper {        int insertOrder(Order order);        List<Order> selectOrder(Order order);}

UserMapper

package love.xiaohh.datasource.mapper.user;import love.xiaohh.datasource.entities.user.User;import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapperpublic interface UserMapper {        int insertUser(User user);        List<User> selectUser(User user);}

之后我会将代码提交到 gitee,所以 Mapper.xml、Controller、Service 代码在此处省略,然后我们新增几条用户数据:

SpringBoot如何搭建多数据源

查询一下:

SpringBoot如何搭建多数据源

同时订单数据库:
SpringBoot如何搭建多数据源

查询:

SpringBoot如何搭建多数据源

然后在数据库当中查看是否是发送到不同的数据库:

SpringBoot如何搭建多数据源

可以确定,确实是存入了两个数据库。

以上是“SpringBoot如何搭建多数据源”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: SpringBoot如何搭建多数据源

本文链接: https://lsjlt.com/news/301353.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot如何搭建多数据源
    这篇文章主要为大家展示了“SpringBoot如何搭建多数据源”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot如何搭建多数据源”这篇文章吧。首先我们建立两个数据库(可以不在同一...
    99+
    2023-06-21
  • SpringBoot搭建多数据源的实现方法
    首先我们建立两个数据库(可以不在同一台电脑上): multiple_order: DROP DATABASE IF EXISTS `multiple_order`; CREATE...
    99+
    2024-04-02
  • springboot如何配置多数据源
    在Spring Boot中配置多数据源可以通过创建多个DataSource bean,并使用@Primary和@Qualifier注...
    99+
    2024-04-08
    springboot
  • springboot中如何配置多数据源
    这期内容当中小编将会给大家带来有关springboot中如何配置多数据源,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、建库建表1.1 创建数据库db1和数据库db21.2 在数据库db1中创建表db1...
    99+
    2023-06-15
  • SpringBoot +DynamicDataSource如何切换多数据源
    小编给大家分享一下SpringBoot +DynamicDataSource如何切换多数据源,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!刚开始用一个数...
    99+
    2023-06-26
  • springboot 如何配置多个jndi数据源
    springboot 配置多个jndi数据源 1.在application.properties中,添加jndi配置 如下图 2.新建dataSourceConfig类 3.d...
    99+
    2024-04-02
  • Springboot多租户SaaS如何搭建
    这篇文章主要介绍“Springboot多租户SaaS如何搭建”,在日常操作中,相信很多人在Springboot多租户SaaS如何搭建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Springboot多租户Sa...
    99+
    2023-07-02
  • springboot多数据源配置
    简介 开发当中经常会遇到需要进行多库多表数据整合的需求,在无法拆分项目的情况下,就需要在一个项目中配置多数据源,实现多库数据的整合。本文是在springboot框架的基础上进行的多数据源配置,可参考,也欢迎指正 1、第一步:applicat...
    99+
    2023-08-24
    spring boot mybatis java database
  • springboot 多mysql,多oracle,多mongodb数据源
    目录 前言 一、springboot yml文件配置 三、mysql 和oracle 多数据源的切换 四、测试方法的调用 五、mongodb多数据源配置 六、mongodb 测试方法的调用 总结 前言 最近的工作中要做数据的迁移,用的数据...
    99+
    2023-10-25
    oracle mongodb spring boot mysql 数据库
  • springboot redis如何使用lettuce配置多数据源
    这篇文章将为大家详细讲解有关springboot redis如何使用lettuce配置多数据源,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。springboot是什么springboot一种全新的编程规范...
    99+
    2023-06-14
  • SpringBoot中怎么利用AOP构建多数据源
    SpringBoot中怎么利用AOP构建多数据源,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。当在业务层需要涉及到查询多种同数据库的场景下,我们通常需要在执行sql的时候动...
    99+
    2023-06-16
  • springboot+mybatis实现多数据源
    1. 前言 最近做项目碰到了一个需要连4个不同数据库的需求,其中db1、db2表结构都不相同;另外两个数据库same_db_private、same_db_public表结构完全相同,一个对内一个对外...
    99+
    2023-09-11
    mybatis spring boot java
  • springboot数据源如何配置
    Spring Boot提供了多种配置数据源的方式,可以根据具体的需求选择适合的配置方式。1. 使用默认配置:Spring Boot默...
    99+
    2023-10-09
    springboot
  • 【万字长文】SpringBoot整合MyBatis搭建MySQL多数据源完整教程(提供Gitee源码)
    前言:在我往期的博客介绍了2种关于如何使用SpringBoot搭建多数据源操作,本期博客我参考的是目前主流的框架,把最后一种整合多数据源的方式以博客的形式讲解完,整合的过程比较传统和复杂,不过我依旧会把每个实体类的思路都给大家讲解清楚的...
    99+
    2023-09-02
    spring boot mybatis mysql spring sql 后端
  • springboot中如何利用mybatis-plus配置多数据源
    这篇文章主要介绍“springboot中如何利用mybatis-plus配置多数据源”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot中如何利用mybatis-plus配置多数据源”...
    99+
    2023-06-08
  • 在springboot中使用mybatis如何实现多数据源
    这篇文章给大家介绍在springboot中使用mybatis如何实现多数据源,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务。我们...
    99+
    2023-05-31
    springboot mybatis 多数据源
  • SpringBoot Mybatis 多数据源 MySQL+Oracle+Redis
     一、背景 在SpringBoot Mybatis 项目中,需要连接 多个数据源,连接多个数据库,需要连接一个MySQL数据库和一个Oracle数据库和一个Redis 二、依赖 pom.xml or...
    99+
    2023-09-20
    spring boot mybatis mysql
  • springboot怎么配置多数据源
    在Spring Boot中配置多个数据源可以通过以下步骤来实现: 在pom.xml文件中添加Spring Boot对多数据源的支...
    99+
    2023-10-23
    springboot
  • SpringBoot集成多数据源解析
    一,前面我们介绍了springboot的快速启动,大家肯定对springboot也有所了解,下面我们来介绍一下springboot怎么集成多数据源。在有的项目开发中需要在一个项目中访问多个数据源或者两个项目之间通信(实质上是互相访问对方的数...
    99+
    2023-05-30
    spring boot 多数据源
  • springboot-jta-atomikos多数据源事务管理如何实现
    这篇文章主要介绍“springboot-jta-atomikos多数据源事务管理如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot-jta-atomikos多数据源事务管理如...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作