【SSM基础】HikaciCP、Druid使用

【SSM基础】HikaciCP、Druid使用

其他文章可以通过菜单查看:【BookCase 菜单】

1、前言

我们在访问数据库的时候需要创建连接,之后获取数据,然后释放连接。使用数据库连接池可以节省我们创建和释放数据库连接的时间,并对链接创建进行有效管理。

目前常用的数据库连接池为HikaciCP 和 Druid,其中 Druid 是国内开发,HikaciCP 是Springboot 自带数据库连接池。

具体可以查看官网:https://docs.spring.io/spring-boot/docs/current/reference/html/data.html#data

If you use the spring-boot-starter-jdbc or spring-boot-starter-data-jpa “starters”, you automatically get a dependency to HikariCP.

2、使用

2.1、HikariCP

springboot 配置如下:

spring:
  application:
    name: '@artifactId@'
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    name: defaultDataSource
    url: jdbc:mysql://localhost:3306/bookcase?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull
    password: root
    username: root
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      ##  Hikari 连接池配置 ------ 详细配置请访问:https://github.com/brettwooldridge/HikariCP
      ## 最小空闲连接数量
      minimum-idle: 5
      ## 连接池最大连接数,默认是10
      maximum-pool-size: 15
      ## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
      auto-commit: true
      ## 空闲连接存活最大时间,默认600000(10分钟)
      idle-timeout: 30000
      ## 连接池名称
      pool-name: DatebookHikariCP
      ## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
      max-lifetime: 1800000
      ## 数据库连接超时时间,默认30秒,即30000
      connection-timeout: 30000
      ## 心跳测试语句
      connection-test-query: SELECT 1

HikariCP配置是进行延迟加载的,初始化启动的时候,会进行默认配置HikariDataSource():

public HikariDataSource()
{
    super();
    fastPathPool=null;
}

当第一次访问数据库的时候会再次执行:

public HikariDataSource(HikariConfig configuration)
{
    configuration.validate();
    configuration.copyStateTo(this);

    LOGGER.info("{} - Starting...", configuration.getPoolName());
    pool = fastPathPool = new HikariPool(this);
    LOGGER.info("{} - Start completed.", configuration.getPoolName());

    this.seal();
}

这里可以在控制台看到启动日志:

[INFO ] [2022-04-07 19:15:53] [HikariDataSource]  - DatebookHikariCP - Starting...
[INFO ] [2022-04-07 19:15:54] [HikariDataSource]  - DatebookHikariCP - Start completed.

2.2、Druid配置

  • 添加依赖

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

配置如下:

spring:
  application:
    name: '@artifactId@'
  #数据源配置
  datasource:
    druid:
      ##  druid 连接池配置 ------ 详细配置请访问:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
      initial-size: 5
      ## 最小空闲连接数量
      min-idle: 5
      ## 连接池最大连接数,默认是10
      max-active: 15
      # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
      max-wait: 20000

      # Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
      time-between-eviction-runs-millis: 60000
      # 连接保持空闲而不被驱逐的最小时间
      min-evictable-idle-time-millis: 300000

      # 用来检测连接是否有效的sql 因数据库方言而差, 例如 oracle 应该写成 SELECT 1 FROM DUAL
      validation-query: SELECT 1
      # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
      test-on-borrow: false
      # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
      test-on-return: false
      # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      test-while-idle: true
      filters: config,stat,wall
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: admin
        login-password: admin
        allow:
        deny:
      # druid 监控的配置
      web-stat-filter:
        # 是否开启 WebStatFilter 默认是true
        enabled: true
        # 需要拦截的url
        url-pattern: /*
        # 排除静态资源的请求
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        #session统计功能
        session-stat-enable: true
        #最大session数
        session-stat-max-count: 100000
        #你可以配置principalSessionName,使得druid能够知道当前的session的用户是谁
        principal-session-name: admin
        #你可以配置principalSessionName,使得druid能够知道当前的cookie的用户是谁
        principal-cookie-name: admin

监控访问:

http://ip:port/druid/index.html
例如:http://localhost:8081/druid/index.html

SpringBoot 的配置还是需要参考github: https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

3、总结

偏向监控的可以使用druid,国内企业使用的还是挺多的。
如果想讲究效率Spring官方继承HikariCP也挺好,不用重新再引用Jar包。
具体哪个好,标准不同,见仁见智吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值