• 使用SpringBoot整合国产数据库连接池Druid


    1 前言

    Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池

    说到数据库连接池大家可能首先会想到C3P0,DBCP等相关。今天给大家介绍的是由国产(阿里)的一种连接池技术:Druid

    2 Druid介绍

    Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。它可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。

    Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。

    3 集成SpringBoot使用Druid

    我们使用SpringBoot项目为例,简单讲解如何使用使用Druid

    创建SpringBoot项目
    在这里插入图片描述

    3.1 pom引入依赖

    第一步:在pom.xml中引入druid官方提供的Spring Boot Starter封装。

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.21</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    3.2 配置基本信息

    第二步:在application.properties中配置数据库连接信息

    Druid的配置都以spring.datasource.druid作为前缀

    注意url(不同的数据以及版本对应的url不一致)以及用户名和密码

    spring.datasource.druid.url=jdbc:mysql://localhost:3306/dbtest
    spring.datasource.druid.username=root
    spring.datasource.druid.password=root
    spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3.3 配置Druid的连接池

    与Hikari一样,要用好一个数据源,就要对其连接池做好相应的配置,比如下面这样:

    spring.datasource.druid.initialSize=10
    spring.datasource.druid.maxActive=20
    spring.datasource.druid.maxWait=60000
    spring.datasource.druid.minIdle=1
    spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
    spring.datasource.druid.minEvictableIdleTimeMillis=300000
    spring.datasource.druid.testWhileIdle=true
    spring.datasource.druid.testOnBorrow=true
    spring.datasource.druid.testOnReturn=false
    spring.datasource.druid.poolPreparedStatements=true
    spring.datasource.druid.maxOpenPreparedStatements=20
    spring.datasource.druid.validationQuery=SELECT 1
    spring.datasource.druid.validation-query-timeout=500
    spring.datasource.druid.filters=stat
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    这时候就可以启动项目,看看jar包以及配置是否正常

    如果报以下的错误

    Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType

    在这里插入图片描述
    可以加上这个依赖

     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
                <version>2.1.3.RELEASE</version>
      </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这时候貌似启动了,但是实际上启动失败了
    因为:
    Closing JPA EntityManagerFactory for persistence unit 'default’错误导致springboot启动后终止

    在这里插入图片描述
    解决这个问题,需要我们去使用一个包

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
         <version>2.0.1.RELEASE</version>
    </dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    再次重启,解决问题
    在这里插入图片描述

    到这一步,就已经完成了将Spring Boot的默认数据源配置成Druid的所有操作。

    3.4 配置Druid监控

    既然用了Druid,那么对于Druid的监控功能怎么能不用一下呢?下面就来再进一步做一些配置,来启用Druid的监控。

    3.4.1 在pom.xml中引入监控依赖

    第一步:在pom.xml中引入spring-boot-starter-actuator模块

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    3.4.2 配置文件中添加Druid的监控配置。

    主要用于开启stat监控统计的界面以及监控内容的相关配置

    spring.datasource.druid.stat-view-servlet.enabled=true
    #  访问地址规则
    spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
    # 是否允许清空统计数据
    spring.datasource.druid.stat-view-servlet.reset-enable=true
    # 监控页面的登录账户
    spring.datasource.druid.stat-view-servlet.login-username=admin
    # 监控页面的登录密码
    spring.datasource.druid.stat-view-servlet.login-password=admin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    4 访问页面

    完成上面所有配置之后,启动应用,访问Druid的监控页面http://localhost:8080/druid/,可以看到如下登录页面:

    输入配置的spring.datasource.druid.stat-view-servlet.login-username和spring.datasource.druid.stat-view-servlet.login-password配置的登录账户与密码,就能看到如下监控页面

    在这里插入图片描述
    页面预览
    在这里插入图片描述

    进入到这边时候,就可以看到对于应用端而言的各种监控数据了。这里讲解几个最为常用的监控页面:

    4.1 数据源

    这里可以看到之前我们配置的数据库连接池信息以及当前使用情况的各种指标。

    在这里插入图片描述

    4.2 SQL监控

    该数据源中执行的SQL语句极其统计数据。在这个页面上,我们可以很方便的看到当前这个Spring Boot都执行过哪些SQL,这些SQL的执行频率和执行效率也都可以清晰的看到。

    我这里没有运行sql所以是空的
    在这里插入图片描述

    4.3 SQL防火墙

    该页面记录了与SQL监控不同维度的监控数据,更多用于对表访问维度、SQL防御维度的统计。
    在这里插入图片描述

    在这里插入图片描述
    该功能数据记录的统计需要在spring.datasource.druid.filters中增加wall属性才会进行记录统计,比如这样:

    spring.datasource.druid.filters=stat,wall
    
    • 1

    这里我把全部的pom文件和配置文件献上

    依赖

        <dependencies>
            <!--druid数据库连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.21</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
                <version>2.1.3.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.18</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>2.7.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.0.1.RELEASE</version>
            </dependency>
    
    
        </dependencies>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    在这里插入代码片
    
    • 1

    配置文件

    spring.datasource.druid.url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT&allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=utf8
    spring.datasource.druid.username=root
    spring.datasource.druid.password=root
    spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
    
    spring.datasource.druid.initialSize=10
    spring.datasource.druid.maxActive=20
    spring.datasource.druid.maxWait=60000
    spring.datasource.druid.minIdle=1
    spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
    spring.datasource.druid.minEvictableIdleTimeMillis=300000
    spring.datasource.druid.testWhileIdle=true
    spring.datasource.druid.testOnBorrow=true
    spring.datasource.druid.testOnReturn=false
    spring.datasource.druid.poolPreparedStatements=true
    spring.datasource.druid.maxOpenPreparedStatements=20
    spring.datasource.druid.validationQuery=SELECT 1
    spring.datasource.druid.validation-query-timeout=500
    spring.datasource.druid.filters=stat
    
    
    spring.datasource.druid.stat-view-servlet.enabled=true
    # 访问地址规则
    spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
    # 是否允许清空统计数据
    spring.datasource.druid.stat-view-servlet.reset-enable=true
    # 监控页面的登录账户
    spring.datasource.druid.stat-view-servlet.login-username=admin
    # 监控页面的登录密码
    spring.datasource.druid.stat-view-servlet.login-password=admin
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    机器学习笔记之变分推断(四)随机梯度变分推断(SGVI)
    bluez5.50蓝牙文件传输
    骑士人才系统74cms专业版实现本地VUE打包和在线升级方法以及常见问题
    【pytorch记录】pytorch的分布式 torch.distributed.launch 命令在做什么呢
    【数据结构与算法系列4】长度最小的子数组 (C++ & Python)
    零基础转行软件测试岗位有哪些一定要注意的地方?
    IP协议-NAT机制(理解网络结构的关键要点)
    救生衣、浮力背心等个人漂浮装置设备亚马逊认证测试标准
    Flask(Jinja2) 服务端模板注入漏洞(SSTI)
    从校园智能门锁预见万物互联的未来
  • 原文地址:https://blog.csdn.net/weixin_46713508/article/details/127337015