SpringBoot第36讲:SpringBoot集成连接池 - 集成数据库Druid连接池

SpringBoot第36讲:SpringBoot集成连接池 - 集成数据库Druid连接池

上文介绍默认数据库连接池HikariCP,本文是SpringBoot第36讲,主要介绍SpringBoot集成阿里开源的Druid连接池的实践; 客观的来说,阿里Druid只能说是中文开源中 功能全且广泛的以连接池为基础的监控组件,但是(仅从连接池的角度)在生态,维护性,开源规范性,综合性能等方面和HikariCP比还是有很大差距。

文章目录

  • SpringBoot第36讲:SpringBoot集成连接池 - 集成数据库Druid连接池
    • 1、知识准备
      • 1.1、Druid连接池的定位?
    • 2、简单示例 (白龙马采用的这种方案)
      • 2.1、POM配置
      • 2.2、yml配置
      • 2.3、测试
    • 3、进一步理解
      • 3.1、更多功能等
        • 1、监控信息采集的 StatFilter
        • 2、诊断支持
        • 3、防SQL注入
      • 3.2、如何评价阿里的Druid连接池
    • 4、示例源码
    • 5、白龙马druid连接池starter

1、知识准备

了解Druid连接池。

1.1、Druid连接池的定位?

Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。

  • Github项目地址
  • Druid开发文档
  • Druid下载
  • 监控DEMO

2、简单示例 (白龙马采用的这种方案)

本示例主要展示SpringBoot2 和 Druid CP的集成,并在SpringBoot第23讲:SpringBoot集成MySQL - 基于JPA的封装 基础增加Druid而成。

2.1、POM配置

增加依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.9</version>
</dependency>

2.2、yml配置

详细的yml配置如下:

spring:datasource:url: jdbc:mysql://localhost:3306/db_user?useSSL=false&autoReconnect=true&characterEncoding=utf8driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: qwj930828# Druid datasourcetype: com.alibaba.druid.pool.DruidDataSourcedruid:# 初始化大小initial-size: 5# 最小连接数min-idle: 10# 最大连接数max-active: 20# 获取连接时的最大等待时间max-wait: 60000# 一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000# 多久才进行一次检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000# 配置扩展插件:stat-监控统计,log4j-日志,wall-防火墙(防止SQL注入),去掉后,监控界面的sql无法统计filters: stat,wall# 检测连接是否有效的 SQL语句,为空时以下三个配置均无效validation-query: SELECT 1# 申请连接时执行validationQuery检测连接是否有效,默认true,开启后会降低性能test-on-borrow: true# 归还连接时执行validationQuery检测连接是否有效,默认false,开启后会降低性能test-on-return: true# 申请连接时如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,默认false,建议开启,不影响性能test-while-idle: true# 是否开启 StatViewServletstat-view-servlet:enabled: true# 访问监控页面 白名单,默认127.0.0.1allow: 127.0.0.1login-username: adminlogin-password: admin# FilterStatfilter:stat:# 是否开启 FilterStat,默认trueenabled: true# 是否开启 慢SQL 记录,默认falselog-slow-sql: true# 慢 SQL 的标准,默认 3000,单位:毫秒slow-sql-millis: 500# 合并多个连接池的监控数据,默认falsemerge-sql: truejpa:open-in-view: falsegenerate-ddl: falseshow-sql: falseproperties:hibernate:dialect: org.hibernate.dialect.MySQLDialectformat_sql: trueuse-new-id-generator-mappings: false

更多的配置,请参考 官方配置

2.3、测试

访问 http://localhost:8080/druid/datasource.html

admin/admin登录

在这里插入图片描述

访问接口,进行SQL查询

在这里插入图片描述

SQL和慢查询监控

  • 只能查询详情,没有聚合信息?

在这里插入图片描述

3、进一步理解

进一步理解下阿里的Druid。

3.1、更多功能等

Druid连接池最初就是为监控系统采集jdbc运行信息而生的,它内置了StatFilter 功能,能采集非常完备的连接池执行信息,Druid连接池内置了能和Spring/Servlet关联监控的实现,使得监控Web应用特别方便。Druid连接池内置了一个监控页面,提供了非常完备的监控信息,可以快速诊断系统的瓶颈。更多请参考:Druid 的GitHub仓库 wiki

1、监控信息采集的 StatFilter

Druid连接池的监控信息主要是通过StatFilter 采集的,采集的信息非常全面,包括SQL执行、并发、慢查、执行时间区间分布等。具体配置可以看这个配置_StatFilter

  • 监控不影响性能

Druid增加StatFilter之后,能采集大量统计信息,同时对性能基本没有影响。StatFilter对CPU和内存的消耗都极小,对系统的影响可以忽略不计。监控不影响性能是Druid连接池的重要特性

  • SQL参数化合并监控

实际业务中,如果SQL不是走PreparedStatement,SQL没有参数化,这时SQL需要参数化合并监控才能真实反映业务情况。如下SQL:

select * from t where id = 1
select * from t where id = 2
select * from t where id = 3

参数化后:

select * from t where id = ?

参数化合并监控是基于SQL Parser语法解析实现的,是Druid连接池独一无二的功能

  • 执行次数、返回行数、更新行数和并发监控

StatFilter能采集到每个SQL的执行次数、返回行数总和、更新行数总和、执行中次数和和最大并发。并发监控的统计是在SQL执行开始对计数器加一,结束后对计数器减一实现的。可以采集到每个SQL的当前并发和采集期间的最大并发。

  • 慢查监控

缺省执行耗时超过3秒的被认为是慢查,统计项中有包括每个SQL的最后发生的慢查的耗时和发生时的参数。

  • Exception监控

如果SQL执行时抛出了Exception,SQL统计项上会Exception有最后的发生时间、堆栈和Message,根据这些信息可以很容易定位错误原因。

2、诊断支持

Druid连接池内置了LogFilter,将 Connection/Statement/ResultSet 相关操作的日志输出,可以用于诊断系统问题,也可以用于Hack一个不熟悉的系统。

LogFilter 可以输出连接申请/释放,事务提交回滚,Statement的Create/Prepare/Execute/Close,ResultSet的Open/Next/Close,通过LogFilter 可以详细诊断一个系统的Jdbc行为。

LogFilter有Log4j、Log4j2、Slf4j、CommsLog等实现,具体配置看这里 配置_LogFilter

3、防SQL注入

SQL注入攻击是黑客对数据库进行攻击的常用手段,Druid连接池内置了WallFilter 提供防SQL注入功能,在不影响性能的同时防御SQL注入攻击。

  • 基于语意的防SQL注入

Druid连接池内置了一个功能完备的SQL Parser,能够完整解析mysql、sql server、oracle、postgresql的语法,通过语意分析能够精确识别SQL注入攻击

  • 极低的漏报率和误报率

基于SQL语意分析,大量应用和反馈,使得Druid的防SQL注入拥有极低的漏报率和误报率。

  • 防注入对性能影响极小

内置参数化后的Cache、高性能手写的 Parser,使得打开防SQL注入对应用的性能基本不受影响。

3.2、如何评价阿里的Druid连接池

客观的来说,阿里Druid只能说是中文开源中功能全且广泛的以连接池为基础的监控组件,但是(仅从连接池的角度)在生态,维护性,开源规范性,综合性能等方面和HikariCP比还是有很大差距。

  • 首先,仅从功能上看,Druid并不是一个存粹的连接池,它还承载了监控,诊断,安全的功能。
  • 从产品的角度看,all in one 也是有代价的,如果我只期望使用连接池的功能,其它的功能对于使用者来说就是鸡肋;而我们没有看到其长期架构设计(比如插拔式架构,分包设计等), 大概率是当时Druid这种开源的驱动方式 并不是一个有完善规范的开源软件开发方式

看到druid主要作者wenshao和hikari作者的讨论,读者自行辨别

img

文档的规范性,发包规范性,bug修复,生态构建等方面国产开源在那时(当下及未来一段时间)还有很长的路要走。

4、示例源码

todo

5、白龙马druid连接池starter

todo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89165.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel填数据转json格式

定制化比较严重&#xff0c;按需更改 excel文件如下 代码 # -*- coding: utf-8 -*- import oss2 import shutil import sys import xlwt import xlrd import json from datetime import datetime, timedeltafile1 "C:\\Users\\cxy\\Desktop\\generate.xls" #打开表…

OCP China Day 2023:五大社区齐聚,加速开源开放创新与落地

8月10日&#xff0c;2023年开放计算中国社区技术峰会&#xff08;OCP China Day 2023&#xff09;在北京举行。智慧时代&#xff0c;计算多元化、应用多样化、技术复杂化正驱动数据中心新一轮变革&#xff0c;开源开放社区已成为推动数据中心持续创新的重要力量&#xff0c;通过…

多线程与高并发--------线程池

线程池 一、什么是线程池 在开发中&#xff0c;为了提升效率的操作&#xff0c;我们需要将一些业务采用多线程的方式去执行。 比如有一个比较大的任务&#xff0c;可以将任务分成几块&#xff0c;分别交给几个线程去执行&#xff0c;最终做一个汇总就可以了。 比如做业务操…

Maven进阶2 -- 私服(Nexus)、私服仓库分类、资源上传和下载

目录 私服是一台独立的服务器&#xff0c;用于解决团队内部的资源共享与资源同步问题。 1.Nexus Nexus是sonatype公司的一款maven私服产品。 下载地址 启动 nexus.exe /run nexus 访问 & 登录 2.私服仓库分类 3.资源上传和下载 本地仓库上传和访问资源需要进行配置。…

SpingBoot-Vue前后端——实现CRUD

目录​​​​​​​ 一、实例需求 ⚽ 二、代码实现 &#x1f3cc; 数据库 &#x1f440; 后端实现 &#x1f4eb; 前端实现 &#x1f331; 三、源码下载 &#x1f44b; 一、实例需求 ⚽ 实现一个简单的CRUD&#xff0c;包含前后端交互。 二、代码实现 &#x1f3cc; 数…

Java SPI机制

Java SPI机制 java的spi就是一种服务提供发现机制&#xff0c;在一方制定好接口规范后&#xff0c;通过spi的机制可以它的子实现类进行服务发现&#xff0c;以及加载它的子实现类&#xff0c;通过这种机制&#xff0c;让我们在引入第三方库时&#xff0c;不用讲第三方库中的类…

管易云和金蝶云星空接口打通对接实战

管易云和金蝶云星空接口打通对接实战 对接系统管易云 管易云是上海管易云计算软件有限公司旗下的专注提供电商企业管理软件服务的品牌&#xff0c;总部位于中国上海张江高科技产业园区。管易云旗下拥有管易云C-ERP、EC-OMS、EC-WMS、B2C/B2B/BBC/微商城开发、PDA无纸化仓储解决…

TypeScript项目中Axios的封装

目录 前言 一、axios中的常见类型 1. AxiosInstance 2. AxiosRequestConfig 3. AxiosResponse 4. AxiosError 二、axios封装步骤 三、封装后的完整代码 1. 基础封装 2. 高级封装 前言 为了实现统一的网络请求处理和管理&#xff0c;在日常开发中我们常常封装 axios&…

一个步骤跳过 Unity 启动Logo | 多平台适用 | 官方API支持

前言【Unity实战篇 】 | 一个步骤跳过 Unity Logo 界面 | 多平台适用 | 官方API支持使用方法核心 API1. RuntimeInitializeOnLoadMethodAttribute2. SplashScreen效果展示总结前言 众所周知,使用Unity引擎打包的工程在启动时都带有Unity的默认启动Logo。这个问题可以通过购买U…

Codeforces Round 893 (Div. 2)ABC

Codeforces Round 892 (Div. 2) 目录 A. United We Stand题目大意思路代码 B. Olya and Game with Arrays题目大意思路代码 C. Another Permutation Problem题目大意思路代码 A. United We Stand 题目大意 给你一个数组&#xff0c;把这个数组分成两个数组a和b&#xff0c;使…

大数据-玩转数据-Flink RedisSink

一、添加Redis Connector依赖 具体版本根据实际情况确定 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-redis_2.11</artifactId><version>1.1.5</version> </dependency>二、启动redis 参…

使用KETTLE工具在Oracle和Dm8之间迁移数据

oracle 代码测试数据 CREATE TABLE PRODUCT_CATEGORY ( PRODUCT_CATEGORYID NUMBER(11,0) NOT NULL , NAME VARCHAR2(255) NOT NULL ENABLE, PRIMARY KEY (PRODUCT_CATEGORYID) )INSERT ALL into PRODUCT_CATEGORY(PRODUCT_CATEGORYID, NAME)VALUES(2,国学) into PRODUCT_CATEG…

Qt开发技术:Q3D图表开发笔记:Q3DSurface三维曲面图介绍、Demo以及代码详解

前言 qt提供了q3d进行三维开发&#xff0c;虽然这个框架没有得到大量运用也不是那么成功&#xff0c;性能上也有很大的欠缺&#xff0c;但是普通的点到为止的应用展示还是可以的。   其中就包括华丽绚烂的三维图表&#xff0c;数据量不大的时候是可以使用的。   前面介绍了…

win10电脑右下角不显示电脑图标,但是能正常上网,怎么解决?

一、问题描述 win10系统更新后&#xff0c;电脑右下角不显示小电脑图标&#xff0c;但是能正常上网&#xff0c;而且用命令测试时显示的是192打头的网址。 二、解决方法 运行命令提示符窗口&#xff0c;在命令提示符中输入&#xff1a;netsh winsock reset&#xff08; 如果提示…

学习pytorch 3 tensorboard的使用

tensorboard的使用 1. 安装2. add_scalar 查看函数图形3. 查看结果4. add_image() 查看训练步骤中间结果的图片 1. 安装 pytorch conda环境 pip install tensorboard pip install opencv-python2. add_scalar 查看函数图形 常用来查看 train val loss等函数图形 from torch…

第57步 深度学习图像识别:CNN可视化(Pytorch)

基于WIN10的64位系统演示 一、写在前面 由于不少模型使用的是Pytorch&#xff0c;因此这一期补上基于Pytorch实现CNN可视化的教程和代码&#xff0c;以SqueezeNet模型为例。 二、CNN可视化实战 继续使用胸片的数据集&#xff1a;肺结核病人和健康人的胸片的识别。其中&…

Java整合Selenium录制视频

捕捉视频 有时候我们未必能够分析故障只需用日志文件或截图的帮助。有时捕获完整的执行视频帮助。让我们了解如何捕捉视频。 我们将利用Monte媒体库的执行相同。 配置 第1步&#xff1a;导航到URL下载屏幕记录JAR&#xff0c;如下图所示。 http://www.randelshofer.ch/monte…

day24-106.从中序与后序遍历序列构造二叉树

106.从中序与后序遍历序列构造二叉树 力扣题目链接(opens new window) 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 中序遍历 inorder [9,3,15,20,7]后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&am…

如何在win10系统上使用旧版本的IE浏览器

win10系统打开IE浏览器自动变成了Edge浏览器&#xff0c;切换成IE模式时&#xff0c;IE浏览器的版本默认为IE11&#xff08;注&#xff1a;Edge浏览器只支持IE11&#xff09;&#xff0c;有些网站只能使用IE浏览器打开或者在做一些兼容性测试时&#xff0c;需要使用到不同版本的…

PLC求解弹簧质量模型微分方程数值解(RK4梯形图程序)

微分方程的数值求解,属于数学分析类课程涉及的内容。大家可以参看相关书籍对Runge-Kutta法的介绍,弹簧质量阻尼模型详细的微分方程介绍可以查看下面文章,链接如下: 弹簧质量阻尼系统前馈PID位置控制(PLC闭环仿真SCL+ST代码)_RXXW_Dor的博客-CSDN博客带前馈控制的博途PID程…