Spring Boot 数据库连接池 Druid
简介
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
Druid:/ˈdruːɪd a priest of an ancient Celtic religion 德鲁伊特(古代凯尔特人的祭司)
Druid wiki 介绍挺全面的,有中文教程,常见问题的Wiki总结也挺全。
Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为
Druid 实用的功能:
- 详细的监控
- ExceptionSorter,针对主流数据库的返回码都有支持
- SQL 防注入
- 内置加密配置
- 众多扩展点,方便定制
配置
怎么配置数据库连接池?
你可以在程序中直接调用DruidDataSource,也可以使用Spring配置,或者使用JNDI配置。
配置 Druid 连接池方式主要有两种:
- 引入第三方druid包,这种在配置时需要手动配置
DruidDataSource类 和监控 - 引入
druid-spring-boot-starter包, 修改对应环境配置文件即可,本文采用的这种方式,Github 上有次对应的指导:Druid Spring Boot Starter-中文
POM-添加 Druid 依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.13</version>
</dependency>
添加 Druid 配置
filters: stat,wall,log4j
- stat:Druid 内置提供一个 StatFilter ,用于统计监控信息。如果需要配置访问页面可以参考:配置_StatViewServlet配置;
- wall:Druid 防御 SQL 注入攻击的 WallFilter 就是通过 Druid 的 SQL Parser 分析。Druid 提供的 SQL Parser 可以在 JDBC 层拦截 SQL 做相应处理,比如说分库分表、审计等。对应了监控页面的 「防火墙」页面;
- log4j:这个就是日志记录的功能,可以把 sql 语句打印到 log4j 供排查问题。
- config: 提供了密码加解密的功能
修改对应环境的配置文件,添加 druid 的支持
mybatis.type-aliases-package==com.michael.mybatisdemo
spring.datasource.url=jdbc:mysql://192.168.3.43:3306/beta?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=cicd
spring.datasource.password=Home123*
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
server.port=8089
swagger.enable=true
# druid连接池配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
# 初始化大小,最小,最大
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=100
spring.datasource.druid.min-idle=5
# 连接超时配置
spring.datasource.druid.max-wait=60000
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.validation-query-timeout=60000
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
# 多久进行检测一次空闲的连接,单位毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 连接最小生存时间
spring.datasource.druid.min-evictable-idle-time-millis=100000
# druid配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters=config,wall,stat
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
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=false
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin123
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
spring.datasource.druid.stat-view-servlet.deny=192.168.32.139
# druid配置 Filter
# 配置StatFilter
spring.datasource.druid.filter.stat.db-type=mysql
spring.datasource.druid.filter.stat.log-slow-sql=true
# 配置监控拦截,慢sql,10秒,并且通过日志输出执行慢的SQL
spring.datasource.druid.filter.stat.slow-sql-millis=5000
# 配置WallFilter
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=mysql
spring.datasource.druid.filter.wall.config.delete-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false
查看
127.0.0.1:8080/druid/login.html, 进入 druid 登陆界面,如下图,输入在配置类 DruidConfiguration 中配置的用户名和密码,进入监控界面
我们已经成功的访问到了监控首页,可以看到大致包含了如下几个模块:数据源、SQL监控、SQL防火墙、Web应用、URI监控、Session监控、JSONAPI等。
数据源
可以看到项目中管理的所有数据源配置的详细情况,除了密码没有显示外其他都在。
SQL监控
可以查看所有的执行sql语句
SQL防火墙
druid提供了黑白名单的访问,可以清楚的看到sql防护情况。
Web应用
可以看到目前运行的web程序的详细信息。
URI监控
可以监控到所有的请求路径的请求次数、请求时间等其他参数。
Session监控
可以看到当前的session状况,创建时间、最后活跃时间、请求次数、请求时间等详细参数。
JSONAPI
通过api的形式访问Druid的监控接口,api接口返回Json形式数据。
其他


本文参考示例
参考
Spring Boot 数据库连接池 Druid的更多相关文章
- Spring Boot 数据库连接池 HikariCP
简介 HikariCP 来源于日语,「光」的意思,意味着它很快!可靠的数据源,spring boot2.0 已经将 HikariCP 做为了默认的数据源链接池. 官网详细地说明了HikariCP所做的 ...
- spring配置数据库连接池druid
连接池原理 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象.使用完毕后,用户也并非将连 ...
- Spring Boot 数据库连接池参数
挑战A.I.,赢百万奖金......了解更多详情>>> Tomcat JDBC 连接池 Spring Boot 默认选择 Tomcat JDBC Pool 作为数据库连接池.Tomc ...
- spring boot 数据库连接池配置
HikariCP 连接池配置: http://stackoverflow.com/questions/29650501/hikaricp-starts-when-mvn-spring-bootrun- ...
- Spring Boot 2.x基础教程:使用国产数据库连接池Druid
上一节,我们介绍了Spring Boot在JDBC模块中自动化配置使用的默认数据源HikariCP.接下来这一节,我们将介绍另外一个被广泛应用的开源数据源:Druid. Druid是由阿里巴巴数据库事 ...
- Druid + spring 配置数据库连接池
1. Druid的简介 Druid是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...
- 太妙了!Spring boot 整合 Mybatis Druid,还能配置监控?
Spring boot 整合 Mybatis Druid并配置监控 添加依赖 <!--druid--> <dependency> <groupId>com.alib ...
- 数据库连接池druid
推荐一个带监控的数据库连接池druid,阿里的,据说比c3p0连接池性能要好点,主要是带sql,spring,uri等访问监控,比较直观地址: https://github.com/alibaba/d ...
- Spring Boot 线程池
参考 SpringBoot 线程池 程序猿DD-Spring Boot使用@Async实现异步调用:自定义线程池 如何优雅的使用和理解线程池 Spring Boot线程池的使用心得 博客园-Sprin ...
随机推荐
- windows修改PowerShell(命令提示符)默认中文编码方式
如果以下方法都没有作用的话,可以直接在代码中调用<stdlib.h>中的system("mode con cp select=65001")或者是system(&quo ...
- redis操作封装类
class Redis { // 默认配置名称(使用load_config加载) private $_default_config_path = 'package/cache/redis'; ...
- mobx 添加 isEmpty 装饰器
避免 obj.xxx && obj.xxx.length 这样的写法 store import * as u from "lodash"; function isE ...
- 在微信下载app引导页代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- vue里v-for下的key的作用
将v-for的元素赋予唯一的key属性,则会打破‘就地复用原则’: 这个就地复用原则是指 如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确 ...
- 印刷行业合版BOM全阶维护示例
先看看基本界面: 在上图中,左侧为产品的整个树形图 目前产品有4种状态: 1.普通产品,颜色为黑色 2.需要拼版的产品,颜色为绿色 3.拼版的产品(例如印刷件),基准件为红色 4.拼版的产品,非基准件 ...
- Gitlab之版本回滚
gitlab提交错误需要回滚版本 首先查看log找到需要回滚的head git log 回滚 git reset --hard 297ff2dcf20605297684f296a4b4ccaa1cf4 ...
- 简单理解php深复制浅复制问题
其实接触深复制浅复制是通过学习c++了解到的,比如c++很好用的模板,php是不允许方法模板和类模板 一个简单的例子,如果不是很了解php 的取地址符&,可以去看下官方文档,php的& ...
- [Day6]引用数据类型、ArrayList 集合
1.类的定义与使用 (1)类的定义格式 创建java文件,与类名相同 public class 类名{ 数据类型 属性名称1: 数据类型 属性名称2: … } (2)使用格式 导包:我们将所有的类 ...
- git常用命令--tag
/// 查看标签 // 打印所有标签 git tag // 打印符合检索条件的标签 git tag -l 1.*.* // 查看对应标签状态 git checkout 1.0.0 /// 创建标签(本 ...