网站首页 文章专栏 深入druid之druid的使用详解
新建maven项目,导入springboot的依赖即可,版本有很多,选择合适的版本
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.6</version> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.0.RELEASE</version> <exclusions><!-- 去掉默认配置 --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> <!--DB --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.21</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>2.1.0.RELEASE</version> </dependency> <!--pagehelper--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.10</version> <exclusions> <exclusion> <artifactId>mybatis-spring-boot-starter</artifactId> <groupId>org.mybatis.spring.boot</groupId> </exclusion> </exclusions> </dependency>
配置有几种形式,yml和properties都行,看个人喜欢
spring: datasource: username: test password: test url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&useSSL=false driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # 数据库连接池类别 druid: initial-size: 5 # 初始化大小 min-idle: 10 # 最小连接数 max-active: 20 # 最大连接数 max-wait: 60000 # 获取连接时的最大等待时间 min-evictable-idle-time-millis: 300000 # 一个连接在池中最小生存的时间,单位是毫秒 time-between-eviction-runs-millis: 60000 # 多久才进行一次检测需要关闭的空闲连接,单位是毫秒 filters: stat,wall # 配置扩展插件:stat-监控统计,log4j-日志,wall-防火墙(防止SQL注入),去掉后,监控界面的sql无法统计 validation-query: SELECT 1 # 检测连接是否有效的 SQL语句,为空时以下三个配置均无效 test-on-borrow: true # 申请连接时执行validationQuery检测连接是否有效,默认true,开启后会降低性能 test-on-return: true # 归还连接时执行validationQuery检测连接是否有效,默认false,开启后会降低性能 test-while-idle: true # 申请连接时如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,默认false,建议开启,不影响性能 stat-view-servlet: enabled: true # 是否开启 StatViewServlet allow: 127.0.0.1 # 访问监控页面 白名单,默认127.0.0.1 deny: 192.168.56.1 # 访问监控页面 黑名单 login-username: admin # 访问监控页面 登陆账号 login-password: admin # 访问监控页面 登陆密码 filter: stat: enabled: true # 是否开启 FilterStat,默认true log-slow-sql: true # 是否开启 慢SQL 记录,默认false slow-sql-millis: 5000 # 慢 SQL 的标准,默认 3000,单位:毫秒 merge-sql: false # 合并多个连接池的监控数据,默认false wall: log-violation: true reset-stat-enable: true
如上就是一个较为完整的配置了,每个属性配置都有特殊的含义,我们看几个关键的配置
1,连接池大小相关参数
initial-size: 5 # 初始化大小 min-idle: 10 # 最小连接数 max-active: 20 # 最大连接数
初始化大小,以及最小连接数默认都为0,最大默认为8,这个就是连接池中的连接个数了,可以根据项目大小,配置初始化个数
2,连接参数
#-------------基本属性-------------------------------- url: jdbc:mysql://localhost:3306/github_demo?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=true username: root password: root #数据源名,当配置多数据源时可以用于区分。注意,1.0.5版本及更早版本不支持配置该项 #默认"DataSource-" + System.identityHashCode(this) name: zzs001 #如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName driverClassName=com.mysql.cj.jdbc.Driver
3,检查连接参数
min-evictable-idle-time-millis: 300000 # 一个连接在池中最小生存的时间,单位是毫秒 time-between-eviction-runs-millis: 60000 # 多久才进行一次检测需要关闭的空闲连接,单位是毫秒 validation-query: SELECT 1 # 检测连接是否有效的 SQL语句,为空时以下三个配置均无效 test-on-borrow: true # 申请连接时执行validationQuery检测连接是否有效,默认true,开启后会降低性能 test-on-return: true # 归还连接时执行validationQuery检测连接是否有效,默认false,开启后会降低性能 test-while-idle: true # 申请连接时如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,默认false,建议开启,不影响性能
time-between-eviction-runs-millis 参数有两个含义:
#1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
#2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
4,缓存语句
#-------------缓存语句-------------------------------- #是否缓存preparedStatement,也就是PSCache。 #PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭 #默认为false poolPreparedStatements: false #PSCache的最大个数。 #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。 #在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 #默认为10 maxOpenPreparedStatements: 10
5,连接泄露回收参数
#-------------连接泄漏回收参数-------------------------------- #当未使用的时间超过removeAbandonedTimeout时,是否视该连接为泄露连接并删除 #默认为false removeAbandoned: false #泄露的连接可以被删除的超时值, 单位毫秒 #默认为300*1000 removeAbandonedTimeoutMillis: 300*1000 #标记当Statement或连接被泄露时是否打印程序的stack traces日志。 #默认为false logAbandoned: true #连接最大存活时间 #默认-1 #phyTimeoutMillis: -1
6,配置监控
filters: stat,wall # 配置扩展插件:stat-监控统计,log4j-日志,wall-防火墙(防止SQL注入),去掉后,监控界面的sql无法统计 stat-view-servlet: enabled: true # 是否开启 StatViewServlet allow: 127.0.0.1 # 访问监控页面 白名单,默认127.0.0.1 deny: 192.168.56.1 # 访问监控页面 黑名单 login-username: admin # 访问监控页面 登陆账号 login-password: admin # 访问监控页面 登陆密码 filter: stat: enabled: true # 是否开启 FilterStat,默认true log-slow-sql: true # 是否开启 慢SQL 记录,默认false slow-sql-millis: 5000 # 慢 SQL 的标准,默认 3000,单位:毫秒 merge-sql: false # 合并多个连接池的监控数据,默认false
merge-sql: false 配置可以配置合并sql,将sql相同,值不同的sql归为一类
allow,deny可以配置监控页面访问的黑白名单
判断规则:
deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。
如果allow没有配置或者为空,则允许所有访问
7,防止sql注入
开启WallFilter
#过滤器 filters=stat,wall
常见配置如下:
参数 | 缺省值 | 描述 |
---|---|---|
wall.logViolation | false | 对被认为是攻击的SQL进行LOG.error输出 |
wall.throwException | true | 对被认为是攻击的SQL抛出SQLException |
wall.updateAllow | true | 是否允许执行UPDATE语句 |
wall.deleteAllow | true | 是否允许执行DELETE语句 |
wall.insertAllow | true | 是否允许执行INSERT语句 |
wall.selelctAllow | true | 否允许执行SELECT语句 |
wall.multiStatementAllow | false | 是否允许一次执行多条语句,缺省关闭 |
wall.selectLimit | -1 | 配置最大返回行数 如果select语句没有指定最大返回行数 会自动修改selct添加返回限制 |
wall.updateWhereNoneCheck | false | 检查UPDATE语句是否无where条 件这是有风险的 但不是SQL注入类型的风险 |
wall.deleteWhereNoneCheck | false | 检查DELETE语句是否无where条 件这是有风险的 但不是SQL注入类型的风险 |
通过druid内置的页面即可访问,http://localhost:8888/druid/wall.html,账号密码为配置文件的所配置的
如上便是一个druid连接池的全部信息,可以监控相关参数,以及sql的执行,还可以看出可以对异常sql的检查。
简单的使用今天就先到这,之前其实写完了,保存失败了。。。又重写的
版权声明:本文由星尘阁原创出品,转载请注明出处!