006集成druid

Druid是阿里巴巴开源的数据库连接池项目,具备强大的监控和SQL防护功能。它可以监控数据库访问性能,提供StatFilter插件进行SQL执行性能统计,还有密码加密和SQL执行日志等功能。在SpringBoot中集成Druid,需要引入相关依赖,修改配置文件设定连接池参数,并配置StatViewServlet和WebStatFilter以启用监控。
摘要由CSDN通过智能技术生成

目录

1.Druid是什么

2.Druid 可以做什么

3.Druid的参数

4.集成Druid

4.1.依赖引入

4.2.修改配置文件

4.3.启动测试


1.Druid是什么

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

2.Druid 可以做什么

  • 可以监控数据库访问性能,Druid 内置提供了一个功能强大的 StatFilter 插件,能够详细统计 SQL 的执行性能,这对于线上分析数据库访问性能有帮助

  • 替换 DBCP 和 C3P0。Druid 提供了一个高效、功能强大、可扩展性好的数据库连接池

  • 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver 和 DruidDataSource 都支持 PasswordCallback。

  • SQL 执行日志,Druid 提供了不同的 LogFilter,能够支持 Common-Logging、Log4j 和 JdkLog,你可以按需要选择相应的 LogFilter,监控你应用的数据库访问情况。

  • 扩展 JDBC,如果你要对 JDBC 层有编程的需求,可以通过 Druid 提供的 Filter-Chain 机制,很方便编写 JDBC 层的扩展插件

3.Druid的参数

我们先看下官方对相关参数的一个解释说明,DruidDataSource配置兼容DBCP,但个别配置的语意有所区别。

配置缺省值说明
name配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this). 另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错
url连接数据库的url,不同数据库不一样。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username连接数据库的用户名
password连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
driverClassName根据url自动识别这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
initialSize0初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive8最大连接池数量
maxIdle8已经不再使用,配置了也没效果
minIdle最小连接池数量
maxWait获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatementsfalse是否缓存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)方法
testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
keepAlivefalse (1.0.28)连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
timeBetweenEvictionRunsMillis1分钟(1.0.14)有两个含义: 1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
numTestsPerEvictionRun30分钟(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,是组合关系,并非替换关系

4.集成Druid

4.1.依赖引入

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>
​
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.2.8</version>
</dependency>
​
<!-- 引入jdbc-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

4.2.修改配置文件

由于springboot2.x版本以后默认集成的数据源是Hikari,因此我们想要使用Druid需要去指定下,也就是指定type内容

datasource:
   # 数据源类型
  type: com.alibaba.druid.pool.DruidDataSource
   # 数据库链接地址
  url: jdbc:mysql://localhost:3306/zhuhuo-blog?useUnicode=true&characterEncoding=utf-8&seSSL=false&useTimezone=true&serverTimezone=GMT%2B8
   # 用户名 数据库的用户名 自行替换
  username: root
   # 密码   数据库的密码 自行替换
  password: 12345678
   # 驱动名称
  driver-class-name: com.mysql.cj.jdbc.Driver
   # druid 相关参数配置
  druid:
     # 最小连接池数量
    minIdle: 5
     # 最大连接池数量
    maxActive: 20
     # 初始化时建立物理连接的个数
    initialSize: 5
     # 连接时最大等待时间 单位毫秒
    maxWait: 50000
     # 检测连接是否有效的sql
    validationQuery: SELECT 1 FROM DUAL
     # 检测连接的间隔时间
    timeBetweenEvictionRunsMillis: 90000
     # 连接保持空闲而不被驱逐的最小时间
    minEvictableIdleTimeMillis: 300000
     # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
    testWhileIdle: true
     # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
    testOnBorrow: false
     # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
    testOnReturn: false
     # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
    poolPreparedStatements: false
     # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
     # 在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
     # maxPoolPreparedStatementPerConnectionSize: 0
     # 通过别名的方式配置扩展插件 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
    filter:
      stat:
        enabled: true
         # 是否开启慢sql
        log-slow-sql: true
         # 是否开启SQL合并
        merge-sql: true
         # 慢sql的时间标准 单位:毫秒
        slow-sql-millis: 1000
     # 监控统计用的filter:stat
    web-stat-filter:
       # 是否启用StatFilter默认值true
      enabled: true
       # 过滤匹配规则
      url-pattern: /*
       # 过滤忽略的格式
      exclusions: /druid/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico
     # 内置监控页面相关
    stat-view-servlet:
       # 是否启用StatViewServlet
      enabled: true
       # 登录名
      login-username: root
       # 登陆密码
      login-password: root
       # 允许清空统计数据
      reset-enable: true
       # 内置监控页面访问路径 首页默认是 /druid/index.html
      url-pattern: /druid/*

4.3.启动测试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值