美文网首页
SpringBoot中druid连接池的配置

SpringBoot中druid连接池的配置

作者: 海涛_meteor | 来源:发表于2018-08-31 19:37 被阅读0次

前言

首先说一下什么是druid,druid是阿里开源的一个数据库连接池(类似于C3P0),其在监控、可扩展性、稳定性和性能方面具有明显的优势,尤其是提供了可视化的监控页面可以展示数据库慢查询的记录等,可以说是非常良心了。这里虽然说是druid的配置,但其实里面包括了数据库的相关配置了,配置完就可以连接并使用数据库了。

依赖引入

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

druid官方推荐的使用方式是引入druid-spring-boot-starter包,引入后无需再引入druid的包,starter已经自动对druid包进行了依赖。当然也可以只引入druid包,然后通过自己创建DruidDataSource的方式配置,但这样做复杂程度太高了,非常不推荐。

druid.png

文件配置

公司的项目中使用的是yml格式的配置,配置如下,其中最重要的就是urlusernamepassworddriver-class-name,如果对性能方面没有要求的话其他值都可以不配,系统会采用默认值。

spring:
  datasource:
    druid:
      url: jdbc:mysql://ip:port/gserver?characterEncoding=utf-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
      username: user
      password: pwd
       # 数据库连接驱动
      driver-class-name: com.mysql.jdbc.Driver
      # 初始化时建立物理连接的个数
      initial-size: 5
      # 最大连接池数量
      max-active: 20
      # 最小连接池数量
      min-idle: 5
      # 获取连接时最大等待时间
      max-wait: 60000
      # 是否缓存preparedStatement,也就是PSCache。
      pool-prepared-statements: false
      # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
      max-pool-prepared-statement-per-connection-size: -1
      # 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。
      validation-query: SELECT 'x'
      # 单位:秒,检测连接是否有效的超时时间。
      validation-query-timeout: 1
      # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
      test-on-borrow: false
      # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
      test-on-return: false
      # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      test-while-idle: true
      # 有两个含义:1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
      time-between-eviction-runs-millis: 6000
      # 连接保持空闲而不被驱逐的最小时间
      min-evictable-idle-time-millis: 1800000
      # 监控页面相关配置
      stat-view-servlet:
        url-pattern: /druid/*
        login-username: admin
        login-password: admin
      # filter相关配置
      filter:
        stat:
          slow-sql-millis: 1000
          log-slow-sql: true
          enabled: true
        log4j:
          enabled: true
          result-set-log-enabled: false
          connection-log-enabled: false
          statement-parameter-clear-log-enable: false
          statement-close-after-log-enabled: false
          statement-create-after-log-enabled: false
          statement-parameter-set-log-enabled: false
          statement-prepare-after-log-enabled: false

配置数据获取接口

配置完以后可以通过接口来查看生效的参数,接口示例如下:

@RestController
public class DruidStatController {
    @GetMapping("/durid/stat")
    public Object druidStat(){
        // DruidStatManagerFacade#getDataSourceStatDataList 该方法可以获取所有数据源的监控数据,除此之外 DruidStatManagerFacade 还提供了一些其他方法,你可以按需选择使用。
        return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
    }
}

下面列出的就是调用接口返回的参数及格式:

[
  {
    "Identity": 2136298280,
    "Name": "DataSource-2136298280",
    "DbType": "mysql",
    "DriverClassName": "com.mysql.jdbc.Driver",
    "URL": "jdbc:mysql://ip:port/gserver?characterEncoding=utf-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull",
    "UserName": "user",
    "FilterClassNames": [
      "com.alibaba.druid.filter.logging.Log4jFilter",
      "com.alibaba.druid.filter.stat.StatFilter"
    ],
    "WaitThreadCount": 0,
    "NotEmptyWaitCount": 1,
    "NotEmptyWaitMillis": 0,
    "PoolingCount": 1,
    "PoolingPeak": 1,
    "PoolingPeakTime": 1535696830579,
    "ActiveCount": 0,
    "ActivePeak": 1,
    "ActivePeakTime": 1535696830579,
    "InitialSize": 0,
    "MinIdle": 0,
    "MaxActive": 20,
    "QueryTimeout": 0,
    "TransactionQueryTimeout": 0,
    "LoginTimeout": 0,
    "ValidConnectionCheckerClassName": "com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker",
    "ExceptionSorterClassName": "com.alibaba.druid.pool.vendor.MySqlExceptionSorter",
    "TestOnBorrow": true,
    "TestOnReturn": true,
    "TestWhileIdle": true,
    "DefaultAutoCommit": true,
    "DefaultReadOnly": null,
    "DefaultTransactionIsolation": null,
    "LogicConnectCount": 1,
    "LogicCloseCount": 1,
    "LogicConnectErrorCount": 0,
    "PhysicalConnectCount": 1,
    "PhysicalCloseCount": 0,
    "PhysicalConnectErrorCount": 0,
    "ExecuteCount": 1,
    "ExecuteUpdateCount": 0,
    "ExecuteQueryCount": 0,
    "ExecuteBatchCount": 0,
    "ErrorCount": 0,
    "CommitCount": 0,
    "RollbackCount": 0,
    "PSCacheAccessCount": 0,
    "PSCacheHitCount": 0,
    "PSCacheMissCount": 0,
    "StartTransactionCount": 0,
    "TransactionHistogram": [
      0,
      0,
      0,
      0,
      0,
      0,
      0
    ],
    "ConnectionHoldTimeHistogram": [
      0,
      0,
      1,
      0,
      0,
      0,
      0,
      0
    ],
    "RemoveAbandoned": false,
    "ClobOpenCount": 0,
    "BlobOpenCount": 0,
    "KeepAliveCheckCount": 0,
    "KeepAlive": false,
    "FailFast": false,
    "MaxWait": -1,
    "MaxWaitThreadCount": -1,
    "PoolPreparedStatements": false,
    "MaxPoolPreparedStatementPerConnectionSize": 10,
    "MinEvictableIdleTimeMillis": 1800000,
    "MaxEvictableIdleTimeMillis": 25200000,
    "LogDifferentThread": true,
    "RecycleErrorCount": 0,
    "PreparedStatementOpenCount": 1,
    "PreparedStatementClosedCount": 1,
    "UseUnfairLock": false,
    "InitGlobalVariants": false,
    "InitVariants": false
  }
]

管理页面

服务启动后,可以通过http://127.0.0.1:端口/服务名/druid/login.html来登录管理页面


druid-index.png

可以看到druid的监控功能还是很丰富的,尤其是SQL监控这块,可以排查一些慢查询的问题(相关配置项在在spring.datasource.druid.filter.stat中),对于没有完善监控手段的小系统来说非常实用。

相关文章

网友评论

      本文标题:SpringBoot中druid连接池的配置

      本文链接:https://www.haomeiwen.com/subject/xjgswftx.html