3.2.Druid 连接池

Druid:Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。

支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。

Druid针对Oracle和MySql做了特别优化,比如:

  • Oracle的PS Cache内存占用优化
  • MySql的ping检测优化

Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。

简单SQL语句用时10微秒以内,复杂SQL用时30微秒。

通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter,就是通过Druid的SQL Parser分析语义实现的。

重点资料:

中文 https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
英文 https://github.com/alibaba/druid/wiki/FAQ

Druid Spring Boot Starter https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

3.2.1.与 springboot整合依赖

        <!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.21</version></dependency>

3.2.2.与springboot整合配置

3.2.2.1.Druid 配置参数

配置 缺省值 说明
name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:“DataSource-” + System.identityHashCode(this). 另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错。
url 连接数据库的url,不同数据库不一样。
username 连接数据库的用户名
password 连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
driverClassName 根据url自动识别 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
initialSize 0 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive 8 最大连接池数量
maxIdle 8 已经不再使用,配置了也没效果
minIdle 最小连接池数量
maxWait 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatements false 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
maxPoolPreparedStatementPerConnectionSize -1 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
validationQuery 用来检测连接是否有效的sql,要求是一个查询语句,常用select ‘x’。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
validationQueryTimeout 单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法
testOnBorrow true 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnReturn false 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testWhileIdle false 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
keepAlive false(1.0.28) 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
timeBetweenEvictionRunsMillis 1分钟(1.0.14) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接;testWhileIdle的判断依据,详细看testWhileIdle属性的说明
numTestsPerEvictionRun 30分钟(1.0.14) 不再使用,一个DruidDataSource只支持一个EvictionRun
minEvictableIdleTimeMillis 连接保持空闲而不被驱逐的最小时间
connectionInitSqls 物理连接初始化的时候执行的sql
exceptionSorter 根据dbType自动识别 当数据库抛出一些不可恢复的异常时,抛弃连接
filters 属性类型是字符串,通过别名的方式配置扩展插件,监控统计用的filter:stat;日志用的filter:log4j防御sql注入的filter:wall
proxyFilters 类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系

3.2.2.2.properties格式

spring.datasource.druid.db-type=mysql
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/数据库名?serverTimezone=UTC
spring.datasource.druid.username=root
spring.datasource.druid.password=root
# 初始化时建立物理连接的个数
spring.datasource.druid.initial-size=5
# 连接池的最小空闲数量
spring.datasource.druid.min-idle=5
# 连接池最大连接数量
spring.datasource.druid.max-active=200
# 获取连接时最大等待时间,单位毫秒
spring.datasource.druid.max-wait=60000
# 既作为检测的间隔时间又作为testWhileIdel执行的依据
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接(配置连接在池中的最小生存时间)
spring.datasource.druid.min-evictable-idle-time-millis=300000
# 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual)
spring.datasource.druid.validation-query=select 'x'
# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
spring.datasource.druid.test-while-idle=true
# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
spring.datasource.druid.test-on-borrow=false
# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
spring.datasource.druid.test-on-return=false
# 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。
spring.datasource.druid.pool-prepared-statements=true
# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20spring.datasource.druid.filters=stat,wall
#spring.datasource.druid.filter.stat.db-type=mysql
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
spring.datasource.druid.use-global-data-source-stat=true
#druid web监控
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,*.bmp,*.png,*.css,*.ico,/druid/*
#druid web监控 白名单和黑名单
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=12345678
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,192.168.67.42,192.168.0.15
spring.datasource.druid.stat-view-servlet.deny=192.168.0.1

3.2.2.3.yml格式

spring:datasource:username: rootpassword: root# ?serverTimezone=UTC解决时区的报错url: jdbc:mysql://127.0.0.1:3306/数据库名?serverTimezone=UTCdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource# 使用druid数据源druid:# 初始化时建立物理连接的个数initial-size: 5# 连接池的最小空闲数量min-idle: 5# 连接池最大连接数量max-active: 20# 获取连接时最大等待时间,单位毫秒max-wait: 60000# 既作为检测的间隔时间又作为testWhileIdel执行的依据time-between-eviction-runs-millis: 60000# 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接(配置连接在池中的最小生存时间)min-evictable-idle-time-millis: 30000# 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual)validation-query: select 'x'# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。test-while-idle: true# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-borrow: false# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-return: false# 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。pool-prepared-statements: false# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动max-pool-prepared-statement-per-connection-size: 20

数据库连接池 ( 四 ) Druid 连接池相关推荐

  1. c3p0和jdbctemplate配置oracle集群rac,C3P0连接池、DRUID连接池和JdbcTemplate

    目录 一.C3P0连接池 1.C3P0连接池简介 2.常用的配置参数 3.C3P0连接池基本使用 (1)C3P0配置文件 (2)API介绍 4.使用步骤 二.DRUID连接池 1. DRUID简介 2 ...

  2. C3P0连接池、DRUID连接池和JdbcTemplate

    目录 一.C3P0连接池 1.C3P0连接池简介 2.常用的配置参数 3.C3P0连接池基本使用 (1)C3P0配置文件 (2)API介绍 4.使用步骤 二.DRUID连接池 1. DRUID简介 2 ...

  3. c3p0连接池和druid连接池的使用

    1.c3p0连接池 没有配置文件的情况下 @Testpublic void T1() throws SQLException, PropertyVetoException {ComboPooledDa ...

  4. C3P0连接池和Druid连接池

    连接池 以往的JDBC使用的方式,每次运行sql都需要从底层注册驱动获取连接,这样非常耗时,浪费资源,sql执行完毕后又需要释放资源,有点类似于开了一家饭店,有客人来,招聘了几个服务员,客人走后,开除 ...

  5. C3PO连接池与Druid连接池的使用

    C3PO 1.导入jar包:c3p0-0.9.5.2.jar 和mchange-commons-java-0.2.12.jar 2.导入配置文件到 src 目录下: <c3p0-config&g ...

  6. 应用使用Druid连接池经常性断链问题分析

    前段时间有应用使用Druid连接池经常的提示断链报错,整个问题排查分析过程很有意思.这里将Druid连接池.数据库层以及负载均衡层的配置分析下,记录整个问题的分析过程,同时梳理下Druid连接池的配置 ...

  7. Java:Druid连接池

    使用Druid连接池连接500000次数据库,与上一节c3p0连接池进行对比: @Test public void testDruid() throws Exception {//1.加入Druid ...

  8. druid连接池初始化慢_从零开始手写 mybatis (三)jdbc pool 从零实现数据库连接池

    前景回顾 第一节 从零开始手写 mybatis(一)MVP 版本 中我们实现了一个最基本的可以运行的 mybatis. 第二节 从零开始手写 mybatis(二)mybatis interceptor ...

  9. SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面

    一.Druid连接池 1.druid简介 Druid连接池是阿里巴巴开源的数据库连接池项目.Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能.功能强大,能防SQL注入,内置Login ...

最新文章

  1. 如何给DataGrid添加自动增长列
  2. 干货丨一文带你玩转机器学习和深度学习
  3. 十分钟上线-基于函数计算开发 Restful web api asp.net core web app
  4. opencv打开摄像头采集和保存
  5. 数字电路可控门电路原理(三态/同相/反相、缓冲/驱动电路)
  6. Java黑皮书课后题第10章:*10.11(几何:Circle2D类)定义Circle2D类
  7. python 判断字符串是否为空用什么方法?
  8. [css] css的加载会阻塞DOM树解析和渲染吗?为什么
  9. 没有找到站点_为了在家Coding,我搜集了海量的远程站点,然而...
  10. MFC动态菜单全攻略
  11. 令人魂牵梦绕的香格里拉
  12. vasp 计算杨氏弹性_VASP计算-力学常数1
  13. nginx 5xx 状态码分析
  14. xp系统能安装32位的python吗-32位XP系统 Python3.4.4安装scrapy1.6.0
  15. taptap(fake)
  16. 3D图形学基础 基本概念
  17. 【C#】xml解析对比XDocument和XmlDocument
  18. 线程 、GCD、NSOperation用法总结,重复下载,线程之间的通信
  19. 迅捷PDF编辑器如何调整pdf线条粗细图文教程
  20. 我微笑,不代表我快乐。(几米语录)

热门文章

  1. Aptana插件ZIP包下载方法
  2. 设计师收藏的20款英文手写字体【免费下载】
  3. 用名字测试爱情的软件有什么,男女姓名配对测试
  4. Flex: flash特效原理:标签云
  5. 矩阵分析理论在实际工程中的应用_一文讲解视频智能分析技术,在文博安防工程中如何应用...
  6. 端午节祝福的html,端午节祝福网页免费生成软件
  7. 2021年麻城一中高考成绩查询,麻城一中2020年高考成绩 麻城一中2020年高考喜报...
  8. nodejs使用redis.js并进行封装,实现数据存取
  9. 技巧 | python定时发送邮件(自动添加附件)
  10. 看你朋友圈,就知道你很缺爱