Spring Boot 配置连接池(HikariCP | Druid)

连接池

HikariCP

HikariCP很快的原因:

1)字节码级别优化(很多方法通过JavaAssist生成)

2)大量小改进

  • 用FastStatementList代替ArrayList
  • 无锁集合 ConcurrentBag
  • 代理类的优化(比如,用 invokestatic 代替了 invokevirtual)

在Spring Boot 中的配置:

Spring Boot 2.x

  • 默认使用 HikariCP
  • 配置 spring.datasource.hikari.* 配置

常用HikariCP配置参数:

常用配置

# 最大的数据库连接池的大小
spring.datasource.hikari.maximumPoolSize=5
# 最小的空闲连接个数
spring.datasource.hikari.minimumIdle=5
# 空闲连接的超时
spring.datasource.hikari.idleTimeout=600000
# 连接的超时
spring.datasource.hikari.connectionTimeout=30000
# 每个连接最大存活多久
spring.datasource.hikari.maxLifetime=1800000

其他配置详见 HikariCP 官网:

  • https://github.com/brettwooldridge/HikariCP

Alibaba Druid

1.官方介绍:

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

2.Druid实用的功能:
  • 详细的监控
  • ExceptionSorter,针对主流数据库的返回码都有支持
  • SQL防注入
  • 内置加密配置
  • 众多扩展点,方便进行定制【通过Druid Filter来实现】
3.数据源配置

1)直接配置 DruidDataSource

2)通过 druid-spring-boot-starter

  • spring.datasource.druid.*
spring.datasource.url=jdbc:h2:mem:foo
spring.datasource.username=sa
spring.datasource.password=n/z7PyA5cvcXvs8px8FVmBVpaRyNsvJb3X7YfS38DJrIg25EbZaZGvH4aHcnc97Om0islpCAPc3MqsGvsrxVJw==

# 初始连接池大小
spring.datasource.druid.initial-size=5
# 最大活跃数
spring.datasource.druid.max-active=5
# 最小空闲数
spring.datasource.druid.min-idle=5

spring.datasource.druid.filters=conn,config,stat,slf4j

spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
spring.datasource.druid.filter.config.enabled=true

# 获取连接时做检查
spring.datasource.druid.test-on-borrow=true
# 归还连接时做检查
spring.datasource.druid.test-on-return=true
# 空闲连接时做检查
spring.datasource.druid.test-while-idle=true

public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALS8ng1XvgHrdOgm4pxrnUdt3sXtu/E8My9KzX8sXlz+mXRZQCop7NVQLne25pXHtZoDYuMh3bzoGj6v5HvvAQ8CAwEAAQ==

Filter配置

  • spring.datasource.druid.filters=conn,config,stat,slf4j (全部使用默认值)

密码加密

spring.datasource.password=<加密密码>
spring.datasource.druid.filter.config.enabled=true
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=<public-key>

SQL防注入

spring.datasource.druid.filter.wall.enabled=true
# 指定数据库类型
spring.datasource.druid.filter.wall.db-type=h2
# 不允许delete操作
spring.datasource.druid.filter.wall.config.delete-allow=false
# 不允许drop table操作
spring.datasource.druid.filter.wall.config.drop-table-allow=false
# 注:也可以在DB的配置上去封禁这些
4.Druid Filter
  • 用于定制连接池操作的各种环节
  • 可以继承 FilterEventAdapter 以便方便地实现Filter
  • 修改 META-IINF/druid-filter.properties 增加 Filter配置

注意:在引入Druid依赖时,一定要把HikariCP排除,如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>HikariCP</artifactId>
            <groupId>com.zaxxer</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
5.连接池选择时的考量
  • 可靠性
  • 性能
  • 功能
  • 可扩展性
  • 可运维性
  • 其他

社区是否活跃、作者是否修改。。。

学习文档:极客时间-玩转Spring全家桶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值