SpringBoot整合Druid配置多数据源

这篇具有很好参考价值的文章主要介绍了SpringBoot整合Druid配置多数据源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.初始化项目

1.1.初始化工程

1.2.添加依赖

1.3.配置yml文件

1.4.Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹

1.5.配置使用数据源

1.5.1.注解方式

1.5.2.基于AOP手动实现多数据源原生的方式

2.结果展示


Mybatis-Plus:简介 | MyBatis-Plus (baomidou.com)

1.初始化项目

在正式开始之前,先初始化一个springboot项目

1.1.初始化工程

创建一个空的 Spring Boot 工程

可以使用 Spring Initializer (opens new window)快速初始化一个 Spring Boot 工程

1.2.添加依赖

Maven中央仓库

在pom.xml中添加Druid和JDBC驱动的依赖

        <!-- 阿里数据库druid连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>       
        <!-- 多数据源配置dynamic-datasource-spring-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
       <!-- oracle驱动 -->
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <scope>runtime</scope>
        </dependency>
       <!--mysql驱动:注意和mysql版本对应,实际应用中根据需要自行引入相关数据源驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.4</version>
            <scope>runtime</scope>
        </dependency>
        <!--devtools热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>
        <!--Hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.18</version>
        </dependency>
        <!-- 整合mybatis plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>

1.3.配置yml文件

1)application.yml:配置数据源和Druid监控

# 配置多数据源  使用:如果需要调用不用的数据库源,只需要再impl里面使用注释@DS("数据源名称")即可
#  Tomcat  服务配置server:server:server:
server:
  port: 8085
spring:
  devtools:
    restart:
      enabled: true
      additional-paths: src/main/java
      exclude: resources/*
  profiles:
    active: pro
  datasource:
    druid:
      # 下面为连接池的补充设置,应用到上面所有数据源中
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      max-active: 20
      # 配置获取连接等待超时的时间
      max-wait: 60000
      # 每60秒运行一次空闲连接回收器
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.
      test-while-idle: true
      # 建议配置为false。获取连接时执行validationQuery检测连接是否有效,这个配置会降低性能。
      test-on-borrow: false
      # 建议配置为false。获取连接时执行validationQuery检测连接是否有效,这个配置会降低性能。
      test-on-return: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      pool-prepared-statements: true
      # 验证连接是否可用,使用的SQL语句
      validation-query: SELECT 1
      #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall用于防火墙
      max-pool-prepared-statement-per-connection-size: 20
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 合并多个DruidDataSource的监控数据
      use-global-data-source-stat: true
      # 监控过滤器  可视化页面地址:  http://localhost:8085/druid/login.html
      webStatFilter:
        #  是否开启监控
        enabled: true
      # 提供监控信息展示的html页面;提供监控信息的JSON API
      statViewServlet:
        enabled: true
        # 设置白名单,不填则允许所有访问
        allow:
        #  监控路径
        url-pattern: /druid/*
        # 控制台管理用户名和密码
        login-username: admin
        login-password: admin
      # 慢sql记录
      filter:
        stat:
          enabled: true # 开启DruidDataSource状态监控
          log-slow-sql: true # 开启慢SQL记录功能,启用后如果遇到执行很慢的 SQL,便会输出到日志中,
          slow-sql-millis: 5000  # 默认3000毫秒,这里超过5s,就是慢,记录到日志
          merge-sql: true
        # 防御SQL注入
        wall:
          config:
            multi-statement-allow: true

  # 自动设置json返回格式
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss


# mybatis-plus相关配置
mybatis-plus:
  configuration:
    #开启sql日志
    #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
    map-underscore-to-camel-case: true
    # 解决oracle更新数据为null时无法转换报错,mysql不会出现此情况
    jdbc-type-for-null: 'null'
  #实体类所在包
  type-aliases-package: com.batchUtil.model
  # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
  mapper-locations: classpath:mapper/*.xml

# 设置日志级别
logging:
  level:
    root: INFO # INFO级别以及以上级别的日志输出到控制台上
    #com.example.demo.dao: debug,可以控制单个包下日志级别
    # 设置logback.xml位置,如果logback不在resources或者不是默认文件名
    # config: classpath:log/logback.xml

2)application-pro.yml:配置多数据源

#mysql和阿里druid配置
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    dynamic:
      primary: jc-mysqldb #设置默认的数据源或者数据源组
      strict: false
      datasource:
        zw-mysqldb:
        # driver-class需要注意mysql驱动的版本(com.mysql.cj.jdbc.Driver 或 com.mysql.jdbc.Driver)
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://192.168.6.13:3306/500140?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull
          username: root
          password: 123456
        jc-mysqldb:
          driver-class-name: com.mysql.jdbc.Driver
          #捷成数据中心
          url: jdbc:mysql://192.168.5.15:3306/dc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
          username: duizhang_dyt
          password: abc#123#321#cba

1.4.Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹

@MapperScan(value = "com.police.violation.mapper")

1.5.配置使用数据源

数据源的使用有两种方式,一种是注解,一种是切面,两种方式各有优势。

总结:

        注解:每一个方法或者类上需要自己去添加注解,一两个方法或者mapper类还好,要是几十个那就麻烦了,如果更换个数据源,一个一个去修改岂不是很麻烦,这种硬编码方式一般来说是不推荐的,解决办法两种:第一种,自定义注解,实现某些包下自动注入,不需要再加@DS注解,这个和写配置类大同小异;第二种:yml文件配置数据源名称,使用${**}引用的方式命名数据源名称,自定义数据源名称常量,实现更换数据源无需再去 修改@DS注解的内容。

    配置类:推荐使用,实际项目开发中,不同的功能模块分包不同,使用数据源也可能不一样,通过配置类指定Mapper文件的位置,不同包使用不同数据源,新增功能时,直接在原来包下新增对应功能代码即可,无需配置,可以直接使用。这种也更符合我们实际的使用场景。

1.5.1.注解方式

这个方式比较适用用单体项目,应用场景不复杂,没几个mapper文件

@DS注解说明:

1.注解在方法上、类上、接口、枚举,同时存在就近原则,方法上注解优先于类上注解;

2.不使用@DS注解,默认主数据源;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.batchUtil.model.MacConnect;

import java.util.List;

/**
 * @author Administrator
 */
@DS("zw-mysqldb")
public interface MacConnectMapper {

    /**
     * 根据编码获取车站数据库连接信息
     *
     * @return
     */
    MacConnect selectByMacId(String macId);


    List<MacConnect> selectStationMac();


}

1.5.2.基于AOP手动实现多数据源原生的方式

        这种方式比较适合用于大项目,统一规范管理,既是炫技,也符合实际情况,几个数据源就有几个配置类。

1)maven依赖,依赖和前边一样,在这基础上增加切面包

        <!-- aop 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

2)配置文件:和前边一样配置

注意:Spring Boot 2.X 版本不再支持配置继承,多数据源的话每个数据源的所有配置都需要单独配置,否则配置不会生效;

3)多数据源名称类

主数据源配置类:

/**   
 * 类名称:d   
 * 类描述:   
 * 创建人:Administrator
 * 创建时间:2020年4月1日 下午4:45:12   
 * 修改人:Administrator
 * 修改时间:2020年4月1日 下午4:45:12   
 * 修改备注:   
 * @version       
 */

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
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
//配置mapper路径
@MapperScan(basePackages = "com.ykx.transinfo.mapper", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class DataSourceConfig1 {
 
    // 将这个对象放入Spring容器中
    @Bean(name = "test1DataSource")
    // 表示这个数据源是默认数据源
    @Primary
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.one")
    public DataSource getDateSource1()
    {
        return DataSourceBuilder.create().build();
    }
 
    @Bean(name = "test1SqlSessionFactory")
    // 表示这个数据源是默认数据源
    @Primary
    // @Qualifier表示查找Spring容器中名字为test1DataSource的对象
    public SqlSessionFactory test1SqlSessionFactory(@Qualifier("test1DataSource") DataSource datasource)
            throws Exception
    {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/one/*.xml"));
        return bean.getObject();
    }
 
    @Bean("test1SqlSessionTemplate")
    // 表示这个数据源是默认数据源
    @Primary
    public SqlSessionTemplate test1SqlSessionTemplate(
            @Qualifier("test1SqlSessionFactory") SqlSessionFactory sessionFactory)
    {
        return new SqlSessionTemplate(sessionFactory);
    }
}

次数据源配置类:


/**   
 * 类名称:s   
 * 类描述:   
 * 创建人:Administrator
 * 创建时间:2020年4月1日 下午4:45:38   
 * 修改人:Administrator
 * 修改时间:2020年4月1日 下午4:45:38   
 * 修改备注:   
 * @version       
 */

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
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.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
 
@Configuration
@MapperScan(basePackages = "com.ykx.transinfo.mysqlmapper", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class DataSourceConfig2 {
    @Bean(name = "test2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.two")
    public DataSource getDateSource2()
    {
        return DataSourceBuilder.create().build();
    }
 
    @Bean(name = "test2SqlSessionFactory")
    public SqlSessionFactory test2SqlSessionFactory(@Qualifier("test2DataSource") DataSource datasource)
            throws Exception
    {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/two/*.xml"));
        return bean.getObject();
    }
 
    @Bean("test2SqlSessionTemplate")
    public SqlSessionTemplate test2SqlSessionTemplate(
            @Qualifier("test2SqlSessionFactory") SqlSessionFactory sessionFactory)
    {
        return new SqlSessionTemplate(sessionFactory);
    }
}

4).项目结构

注意:重点是mapper结构和配置类里的路径对应

SpringBoot整合Druid配置多数据源

5).启动类——启动类需要取消加载数据源自动配置 

package com.ykx.transinfo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.scheduling.annotation.EnableScheduling;
// @MapperScan 和dao层@Mapper 二选一
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableScheduling
@MapperScan("com.ykx.transinfo.mapper,com.ykx.transinfo.mysqlmapper")
public class DataServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(DataServerApplication.class, args);
	}

}

后续的mapper、service写法和平时没什么不同

数据源可能会碰到事务问题:https://blog.csdn.net/u011974797/article/details/130154340

2.结果展示

服务启动会打印日志:

com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,first} inited
com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,second} inited
druid监控页面:

SpringBoot整合Druid配置多数据源

SpringBoot整合Druid配置多数据源

参考资料:https://blog.csdn.net/u011974797/article/details/130109195文章来源地址https://www.toymoban.com/news/detail-429520.html

到了这里,关于SpringBoot整合Druid配置多数据源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot -02 SpringBoot整合Mybatis、Druid数据源、单元测试、JSP

    mybatis起步依赖 mysql启动依赖 数据源配置 mybatis相关配置 加载mybatis配置文件 mybatis别名配置 日志配置 加载mapper映射文件配置文件 http://localhost:8080/users Druid连接池后台监控:http://localhost:8080/druid/index.html SpringBoot对JSP的支持不是很友好,所以JSP很少被使用 springboot 不支持jsp 但是

    2024年02月06日
    浏览(88)
  • SpringBoot整合Druid数据库连接池&多数据源&注解切换&动态添加

    配置好之后 Druid 会通过 DruidDataSourceAutoConfigure 自动装配 属性配置 数据源枚举 动态数据源 继承 AbstractRoutingDataSource 就可以实现动态数据源了 实现了一个动态数据源类的构造方法,主要是为了设置默认数据源,以及以Map保存的各种目标数据源。其中Map的key是设置的数据源名称

    2024年03月22日
    浏览(65)
  • SpringBoot整合Mybatis-Plus+Druid实现多数据源

    🌺本文主要讲解 springboot +mybatisplus + druid 实现多数据源配置功能 🌺 主页传送门:📀 传送 Spring Boot:    Spring Boot是一个基于Spring框架的开源Java开发框架,旨在简化Spring应用程序的开发、配置和部署。它提供了一种快速、敏捷的方式来构建独立的、生产级别的Spring应用程

    2024年02月09日
    浏览(102)
  • 【SpringBoot 3.x】整合Mybatis-Plus多数据源、Druid

    开发依赖 版本 Spring Boot 3.0.6 Mybatis-Plus 3.5.3.1 dynamic-datasource-spring-boot-starter 3.6.1 JDK 20 SpringBoot启动类修改 由于排除了DruidDataSourceAutoConfigure类的自动装载,就需要手工指定装配以下几个类 查看DruidDataSourceAutoConfigure这个类的源码可以看出,需要把@Import带进来的几个类进行自动装

    2024年02月04日
    浏览(48)
  • Springboot+Druid配置多数据源

    Spring的多数据源支持—AbstractRoutingDataSource,AbstractRoutingDataSource定义了抽象的determineCurrentLookupKey方法,子类实现此方法,来确定要使用的数据源 Druid 实现多数据源支持,核心是Overwrite AbstractRoutingDataSource 的 determineCurrentLookupKey 方法 以springboot框架为基础使用aop注解的方式依赖

    2024年02月11日
    浏览(50)
  • SpringBoot 整合 Neo4j、MySQL 多数据源方案(Druid Mybatis DynamicDatasource)

    本文总结了Neo4j和Spring/SpringBoot、Alibaba Druid、Dynamic Datasource、Mybatis等整合方案,对相应配置做了详细说明。 添加Neo4j JDBC Driver依赖 添加application.yml配置 添加Neo4j JDBC Driver + Alibaba Druid依赖 添加application.yml配置 添加Neo4j JDBC Driver、Alibaba Druid、Dynamic DataSource依赖 添加application.y

    2023年04月08日
    浏览(50)
  • springboot实现多数据源配置(Druid/Hikari)

    使用springboot+mybatis-plus+(Druid/Hikari)实现多数据源配置 操作步骤: 引入相应的maven坐标 编写mybatis配置,集成mybatis或mybatis-plus(如果已集成可跳过) 编写数据源配置类 编写注解,并通过aop进行增强(编写数据源切换代码) 类或方法中使用注解,对数据源进行切换 第一步:

    2024年02月13日
    浏览(50)
  • springboot配置自定义数据源(Druid德鲁伊)的步骤。

    今天和大家分享下在Springboot中配置自定义数据源Druid的两种方法及步骤。 方法一: 1.在pom.xml配置依赖(注释里面的内容) 2.配置自己的数据源设置,我是在yaml文件中配置的,顺便提醒一下,在配置yaml文件的时候缩进问题一定要注意,不然无法读取到就会报错。 spring: datasourc

    2024年02月15日
    浏览(56)
  • Dynamic DataSource 多数据源配置【 Springboot + DataSource + MyBatis Plus + Druid】

    MybatisPlus多数据源配置主要解决的是多数据库连接和切换的问题。在一些大型应用中,由于数据量的增长或者业务模块的增多,可能需要访问多个数据库。这时,就需要配置多个数据源。 2.1.1、引用依赖 2.1.2、application.yml 配置 2.1.3、通用配置类 2.1.4、使用方式 这里便不过多的

    2024年02月03日
    浏览(46)
  • springboot整合多数据源的配置以及动态切换数据源,注解切换数据源

    在许多应用程序中,可能需要使用多个数据库或数据源来处理不同的业务需求。Spring Boot提供了简便的方式来配置和使用多数据源,使开发人员能够轻松处理多个数据库连接。如果你的项目中可能需要随时切换数据源的话,那我这篇文章可能能帮助到你 ℹ️:这里对于pom文件

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包