数据库连接池

作者: haha_writing | 来源:发表于2021-03-17 11:33 被阅读0次

    概述

    数据库连接的建立是一种耗时长,性能低,代价高的操作,频繁的进行数据库连接的建立和关闭会极大影响系统的性能。此外,数据库同时支持的连接总数也是有限的。数据库连接池的出现,正是为了减少应用程序和数据库之间的创建和销毁TCP连接的开销。

    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接,来避免因为没有释放数据库连接而引起的数据库连接遗漏。

    数据库连接池的原理

    在内存中开辟一片空间,将一定数量的数据库连接作为对象存储在对象池中,并对外提供数据库连接的获取和归还方法。除此之外,数据库连接池还提供并发,连接数控制,监控,外部配置,资源重用,检测及容灾,多库多服务,事务处理,定时任务,缓存,异常处理,组件维护等功能。
    连接池的大小不是越大越好,而是应该小到恰到好处。

    常见数据库连接池

    1、c3p0:成熟的,高并发的JDBC连接池,支持缓存和重用PreparedStatements。
    2、Proxool
    3、Jakarta DBCP
    4、DDConnectionBroker
    5、DBPool
    6、XAPool
    7、Primrose
    8、SmartPool
    9、MiniConnectionPoolManager
    10、BoneCP:
    11、Druid:开源项目,为监控而生的数据库连接池。

    HikariCP

    HikariCP,名字来源于日语“光”。官网对它的定义是:Fast,simple,reliable,HikariCP is a "zero-overhead" production ready JDBC connection pool。At roughly 130kb,the library is very
    light。
    SpringBoot2.0,选用HikariCP作为默认的数据库连接池。

    HikariCP配置

    HikariCP对所有的时间配置都采用毫秒。

    必需配置

    1、DataSourceClassName和jdbcUrl
    2、username以及password

    非必需配置

    1、autoCommit:默认true,控制从池返回的连接的默认自动提交行为。
    2、connectionTimeout:控制客户端等待池中连接的最长毫秒数,默认值30s。如果没有连接可用的情况下,超过此时间,则抛出SQLException异常。
    3、idleTimeout:控制连接允许被闲置在池中的最大时间。
    4、maxLifetime:控制池中连接的最大生命周期。关闭后的连接才会被移除。0表示无限生存期,默认为1800000。可以将其设置为比数据库的超时时间短一点。
    5、connectionTestQuery:不建议配置。
    6、minimumIdle:控制HikariCP尝试在池中维护的最小空闲连接数。应该小于等于maximumPoolSize。
    7、maximumPoolSize:控制数据库连接池连接数允许到达的最大值,默认10。

    与监控有关的配置

    1、metricRegistry:
    2、healthCheckRegistry:
    3、poolName:用户定义的连接池名称。

    非常用配置

    1、initializationFailTimeout:如果池无法成功初始化连接,控制池是否快速失败。
    2、isolateInternalQueries:是否在自己的事务中隔离内部池查询。
    3、allowPoolSuspension:控制池是否可以通过JMX挂起和恢复。
    4、readOnly:控制默认情况下从池中获取的Connections是否处于只读状态。
    5、registerMbeans:是否注册JMX以管理Bean。默认false。
    6、catalog:为支持catalog的数据库是设置默认catalog。
    7、connectionInitSql:设置一个SQL语句,每次创建新连接后执行。
    8、driverClassName:
    9、transactionIsolation:控制从池中返回的连接的默认事务隔离级别。
    10、validationTimeout:控制连接测试活性的最长时间,默认值5000。
    11、leakDetectionThreshold:默认0,禁用泄漏检测。
    12、dataSource:默认为none,仅通过编程配置或者IoC容器才可获得。
    13、schema:默认:driver default。
    14、threadFactory:默认为none,仅通过编程配置或者IoC容器才可获得。
    15、scheduledExecutor:默认为none,仅通过编程配置或者IoC容器才可获得。

    相关文章

      网友评论

        本文标题:数据库连接池

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