广告
返回顶部
首页 > 资讯 > 精选 >springboot整合多数据源配置的方式是什么
  • 457
分享到

springboot整合多数据源配置的方式是什么

2023-06-22 06:06:18 457人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关SpringBoot整合多数据源配置的方式是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。简介主要介绍两种整合方式,分别是 springboot+mybati

这篇文章将为大家详细讲解有关SpringBoot整合多数据源配置的方式是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

    简介

    主要介绍两种整合方式,分别是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合。

    一、表结构

    在本地新建两个数据库,名称分别为db1db2,新建一张user表,表结构如下:

    springboot整合多数据源配置的方式是什么

    sql代码:

    CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `name` varchar(25) NOT NULL COMMENT '姓名',  `age` int(2) DEFAULT NULL COMMENT '年龄',  `sex` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性别:0-男,1-女',  `addr` varchar(100) DEFAULT NULL COMMENT '地址',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

    二、多数据源整合

    1. springboot+mybatis使用分包方式整合

    1.1 主要依赖包
    • spring-boot-starter-WEB

    • mybatis-spring-boot-starter

    • mysql-connector-java

    • lombok

    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 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.1.9.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.example</groupId>    <artifactId>multipledatasource</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>multipledatasource</name>    <description>Demo project for Spring Boot</description>    <properties>        <java.version>1.8</java.version>    </properties>       <dependencies>        <!-- spring 依赖 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>         <!-- Mysql 依赖 -->        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>2.1.0</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <scope>runtime</scope>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

    1.2 application.yml 配置文件

    server:  port: 8080 # 启动端口spring:  datasource:     db1: # 数据源1      jdbc-url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8      username: root      passWord: root      driver-class-name: com.mysql.cj.jdbc.Driver    db2: # 数据源2      jdbc-url: jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8      username: root      password: root      driver-class-name: com.mysql.cj.jdbc.Driver

    注意事项

    各个版本的 springboot 配置 datasource 时参数有所变化,例如低版本配置数据库 url 时使用 url 属性,高版本使用 jdbc-url 属性,请注意区分。

    1.3 建立连接数据源的配置文件

    第一个配置文件

    @Configuration@MapperScan(basePackages = "com.example.multipledatasource.mapper.db1", sqlSessionFactoryRef = "db1SqlSessionFactory")public class DataSourceConfig1 {    @Primary // 表示这个数据源是默认数据源, 这个注解必须要加,因为不加的话spring将分不清楚那个为主数据源(默认数据源)    @Bean("db1DataSource")    @ConfigurationProperties(prefix = "spring.datasource.db1") //读取application.yml中的配置参数映射成为一个对象    public DataSource getDb1DataSource(){        return DataSourceBuilder.create().build();    }    @Primary    @Bean("db1SqlSessionFactory")    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(dataSource);        // mapper的xml形式文件位置必须要配置,不然将报错:no statement (这种错误也可能是mapper的xml中,namespace与项目的路径不一致导致)        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/db1/*.xml"));        return bean.getObject();    }    @Primary    @Bean("db1SqlSessionTemplate")    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){        return new SqlSessionTemplate(sqlSessionFactory);    }}

    第二个配置文件

    @Configuration@MapperScan(basePackages = "com.example.multipledatasource.mapper.db2", sqlSessionFactoryRef = "db2SqlSessionFactory")public class DataSourceConfig2 {    @Bean("db2DataSource")    @ConfigurationProperties(prefix = "spring.datasource.db2")    public DataSource getDb1DataSource(){        return DataSourceBuilder.create().build();    }    @Bean("db2SqlSessionFactory")    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(dataSource);        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/db2/*.xml"));        return bean.getObject();    }    @Bean("db2SqlSessionTemplate")    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){        return new SqlSessionTemplate(sqlSessionFactory);    }}

    1.4 具体实现

    项目结构如下:

    springboot整合多数据源配置的方式是什么

    注意事项

    • 在 service 层中根据不同的业务注入不同的 dao 层

    • 如果是主从复制- -读写分离:比如 db1 中负责增删改,db2 中负责查询。但是需要注意的是负责增删改的数据库必须是主库(master)

    2. springboot+druid+mybatisplus使用注解整合

    2.1 主要依赖包

    • spring-boot-starter-web

    • mybatis-plus-boot-starter

    • dynamic-datasource-spring-boot-starter # 配置动态数据源

    • druid-spring-boot-starter # 阿里的数据库连接池

    • mysql-connector-java

    • lombok

    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 https://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelVersion>4.0.0</modelVersion>   <parent>       <groupId>org.springframework.boot</groupId>       <artifactId>spring-boot-starter-parent</artifactId>       <version>2.1.9.RELEASE</version>       <relativePath/> <!-- lookup parent from repository -->   </parent>   <groupId>com.example</groupId>   <artifactId>mutipledatasource2</artifactId>   <version>0.0.1-SNAPSHOT</version>   <name>mutipledatasource2</name>   <description>Demo project for Spring Boot</description>   <properties>       <java.version>1.8</java.version>   </properties>   <dependencies>       <dependency>           <groupId>org.springframework.boot</groupId>           <artifactId>spring-boot-starter-web</artifactId>       </dependency>       <dependency>           <groupId>com.baomidou</groupId>           <artifactId>mybatis-plus-boot-starter</artifactId>           <version>3.2.0</version>       </dependency>       <dependency>           <groupId>com.baomidou</groupId>           <artifactId>dynamic-datasource-spring-boot-starter</artifactId>           <version>2.5.6</version>       </dependency>       <dependency>           <groupId>mysql</groupId>           <artifactId>mysql-connector-java</artifactId>           <scope>runtime</scope>       </dependency>       <dependency>           <groupId>com.alibaba</groupId>           <artifactId>druid-spring-boot-starter</artifactId>           <version>1.1.20</version>       </dependency>       <dependency>           <groupId>org.projectlombok</groupId>           <artifactId>lombok</artifactId>           <optional>true</optional>       </dependency>       <dependency>           <groupId>org.springframework.boot</groupId>           <artifactId>spring-boot-starter-test</artifactId>           <scope>test</scope>       </dependency>   </dependencies>   <build>       <plugins>           <plugin>               <groupId>org.springframework.boot</groupId>               <artifactId>spring-boot-maven-plugin</artifactId>           </plugin>       </plugins>   </build>   <profiles>       <profile>           <id>local1</id>           <properties>               <profileActive>local1</profileActive>           </properties>           <activation>               <activeByDefault>true</activeByDefault>           </activation>       </profile>       <profile>           <id>local2</id>           <properties>               <profileActive>local2</profileActive>           </properties>       </profile>   </profiles></project>

    2.2 application.yml 配置文件

    server:  port: 8080spring:  datasource:    dynamic:      primary: db1 # 配置默认数据库      datasource:        db1: # 数据源1配置          url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8          username: root          password: root          driver-class-name: com.mysql.cj.jdbc.Driver        db2: # 数据源2配置          url: jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8          username: root          password: root          driver-class-name: com.mysql.cj.jdbc.Driver      durid:        initial-size: 1        max-active: 20        min-idle: 1        max-wait: 60000  autoconfigure:    exclude:  com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid配置

    DruidDataSourceAutoConfigure会注入一个DataSourceWrapper,其会在原生的spring.datasource下找 url, username, password 等。动态数据源 URL 等配置是在 dynamic 下,因此需要排除,否则会报错。排除方式有两种,一种是上述配置文件排除,还有一种可以在项目启动类排除:

    @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)public class Application {  public static void main(String[] args) {    SpringApplication.run(Application.class, args);  }}

    2.3 给使用非默认数据源添加注解@DS

    @DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
    注解在 service 实现或 mapper 接口方法上,不要同时在 service 和 mapper 注解。

    @DS("db2") public interface UserMapper extends BaseMapper<User> {}@Service@DS("db2")public class ModelServiceImpl extends ServiceImpl<ModelMapper, Model> implements IModelService {}  @Select("SELECT * FROM user")  @DS("db2")  List<User> selectAll();

    关于springboot整合多数据源配置的方式是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

    --结束END--

    本文标题: springboot整合多数据源配置的方式是什么

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

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

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • springboot整合多数据源配置的方式是什么
      这篇文章将为大家详细讲解有关springboot整合多数据源配置的方式是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。简介主要介绍两种整合方式,分别是 springboot+mybati...
      99+
      2023-06-22
    • springboot整合多数据源配置方式
      目录简介一、表结构二、多数据源整合1. springboot+mybatis使用分包方式整合1.1 主要依赖包1.2 application.yml 配置文件1.3 建立连接数据源的...
      99+
      2022-11-12
    • Springboot多数据源配置之整合dynamic-datasource方式
      目录多数据源配置之整合dynamic-datasourcePOM里加入依赖包yml增加多数据配置:在需要切换数据源的类或方法上加@DS注解dynamic-datasource-spr...
      99+
      2023-03-21
      Springboot多数据源配置 Springboot整合dynamic-datasource Springboot dynamic-datasource
    • Springboot整合多数据源配置流程是什么
      这篇文章主要讲解了“Springboot整合多数据源配置流程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Springboot整合多数据源配置流程是什么”吧!主要介绍两种整合方式,分别...
      99+
      2023-07-05
    • springboot整合druid及多数据源配置
      前言 本篇主要分两部分 ①springboot整合druid的代码配置,以及druid的监控页面演示;②对实际场景中多数据源的配置使用进行讲解。 一、springboot整合druid的演示demo 可以用idea快速生成一个可运行的dem...
      99+
      2023-10-24
      spring boot java spring
    • SpringBoot整合MybatisPlus配置多数据源增强插件的方法是什么
      本篇内容介绍了“SpringBoot整合MybatisPlus配置多数据源增强插件的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
      99+
      2023-06-02
    • SpringBoot整合多数据源的两种方式
      ⭐️作者简介:一个力求全干的Java后端开发者。💗个人主页:CVcode码农的博客 👉当前专栏:SpringBoot整合篇✔️本文内容:多数据源的配置,项目中如果需...
      99+
      2023-09-13
      spring boot java mybatis mysql 面试
    • Springboot多数据源配置之怎么整合dynamic-datasource
      本篇内容介绍了“Springboot多数据源配置之怎么整合dynamic-datasource”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
      99+
      2023-07-05
    • 详解Springboot之整合JDBCTemplate配置多数据源
      目录一、前言二、配置文件三、数据源配置类一、前言 现在在我们的项目中,使用多数据源已经是很常见的,下面,这里总结一下springboot整合jdbcTemplate配置多数据源的代码...
      99+
      2022-11-12
    • Springboot整合JPA配置多数据源流程详解
      目录1. Maven2. 基本配置DataSource3. 多数据源配置3.1 JpaConfigOracle3.2 JpaConfigMysql4. Dao层接口1. Maven ...
      99+
      2022-11-21
      Springboot整合JPA配置多数据源 Springboot多数据源
    • SpringBoot整合Mybatis Plus多数据源的实现方法是什么
      这篇文章主要讲解了“SpringBoot整合Mybatis Plus多数据源的实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot整合Mybatis Plus多数...
      99+
      2023-06-25
    • SpringBoot整合mysql、postgres、sqlserver实现多数据源配置案例
              分享一下近期处理的一个小demo,关于配置多数据源实现不同服务之间的数据推送和数据治理。第一次接触到pg库和sqlserver一头雾水,选择了JDBC+mybatis-plus的方式去链接。 首先要引入以下依赖 org.sp...
      99+
      2023-10-07
      java mybatis
    • SpringBoot多数据源配置的过程是什么
      本篇内容主要讲解“SpringBoot多数据源配置的过程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot多数据源配置的过程是什么”吧!前言多数据源的核心就是向 IOC 容...
      99+
      2023-06-25
    • springboot下配置多数据源的方法
      一、springboot 简介SpringBoot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run"。 我们为Spring平台及第三方库提 供开箱即用的设置,这样你就可以有条不紊地开始。多...
      99+
      2023-05-31
      spring boot 多数据源
    • ElasticSearch整合SpringBoot搭建配置的方法是什么
      本文小编为大家详细介绍“ElasticSearch整合SpringBoot搭建配置的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“ElasticSearch整合SpringBoot搭建配置的方法是什么”文章能帮助大家解决疑惑,下...
      99+
      2023-07-05
    • springboot配置多个数据源两种方式实现
      目录第一种方式:方法二在我们的实际业务中可能会遇到;在一个项目里面读取多个数据库的数据来进行展示,spring对同时配置多个数据源是支持的。 本文中将展示两种方法来实现这个功能。 s...
      99+
      2022-11-13
    • springboot整合druid及配置依赖的方法是什么
      本篇内容主要讲解“springboot整合druid及配置依赖的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot整合druid及配置依赖的方法是什么”吧!Druid简...
      99+
      2023-06-22
    • tk-mybatis整合springBoot使用两个数据源的方法是什么
      这篇文章主要介绍“tk-mybatis整合springBoot使用两个数据源的方法是什么”,在日常操作中,相信很多人在tk-mybatis整合springBoot使用两个数据源的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
      99+
      2023-06-21
    • springboot分布式整合dubbo的方式是什么
      这篇文章主要讲解了“springboot分布式整合dubbo的方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot分布式整合dubbo的方式是什么”吧! Dubbo是...
      99+
      2023-06-21
    • Spring配置数据源的三种方式是什么
      这篇文章主要介绍“Spring配置数据源的三种方式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring配置数据源的三种方式是什么”文章能帮助大家解决问题。一、数据源的作用数据源(连接池)...
      99+
      2023-06-26
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作