HikariCP是一个高性能的JDBC连接池组件,它是基于BoneCP进行改进和优化的开源产品。也是SpringBoot项目自带的连接池。
但是我们项目使用过程经常遇到两个重大问题:

  • 连接池耗尽.
    一般是慢SQL或连接不释放引起,解决排查代码。
  • 连接池被清0.
    一般是应用程序与数据库之间网络问题,也有可能是DB问题,无法新建连接,导致池中连接数一直下降到0.
  • 出现以上两个问题都需要手动重启应用程序,非常影响线上项目。需要在应用程序中能够自动或手动重启数据源。(重启数据源一般比重启应用程序快多了)。

    新建一个代理数据源对象DataSourceCopy 继承 HikariDataSource

    public class DataSourceCopy extends HikariDataSource implements Closeable {
        private volatile DataSource ds;
        private String driver;
        public static DataSourceCopy copy(DataSource ds, String driver) {
            return new DataSourceCopy(ds, driver);
        public DataSourceCopy(DataSource ds, String driver) {
            this.ds = ds;
            this.driver = driver;
        public String getDriver() {
            return this.driver;
        public DataSource getRaw() {
            return this.ds;
        public PrintWriter getLogWriter() throws SQLException {
            return this.ds.getLogWriter();
                                        I use jpa+hibernate+hikariCP. Today I got connection closed error. I setted connectionTimeout and ideleTimeout properties(hikari). If in meantime use does not do any operition hikari close the pool co...
                                        1.Springboot 整合 druid引入依赖:com.alibabadruid-spring-boot-starterjava config 配置:@Configuration@EnableConfigurationProperties(DruidPropertityConfig.class)public class DruidConfig {// 日志private final Logge...
                                        本文详细介绍了HikariCP数据库连接池的YAML配置方法,包含基础配置项(连接数、超时时间等)、高级功能(连接泄漏检测、JMX监控等)以及针对MySQL和PostgreSQL的优化建议。提供了生产环境推荐配置模板,强调应根据服务器核心数和存储类型合理设置连接池大小,并保持max-lifetime小于数据库wait_timeout。最后给出了常见问题的解决方案,包括连接泄漏检测和MySQL 8小时连接超时问题。建议结合监控数据持续优化配置参数。
    修改数据库驱动的版本,使用低等级的版本,我使用的 是
    <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.32</version> </dependency>
    5.x版本的驱动文件jar
                                        而我们Java是面向对象的,一个表对应的是一个类,一行数据就对应的是Java中的一个对象,一个列对应的是对象的属性,所以我们要把数据存储在一个载体里,这个载体就是实体类!在数据中,执行新增操作时,主键列为自动增长,可以在表中直观的看到,但是在Java程序中,我们执行完新增后,只能得到受影响行数,无法得知当前新增数据的主键值。,作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来,以面向对象的角度操作数据库中的数据,即一张表对应一个类,一行数据对应一个对象,一个列对应一个属性!
                                        在项目中,一般情况下访问数据库,会创建一个连接,用完后就关闭它,对于简单的系统这样不会带来什么明显的性能上的开销。但是对于一个复杂的系统,频繁的建立、关闭连接,会极大的减低系统的性能,因为对于数据库连接的使用可能会成为系统性能的瓶颈。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
    SpringBoot默认使用Hikari
    SpringBoot项目如果
                                        最近在做线上oracle11g thin链接升级的时候,搞出一个线上故障,原因是增加的oracle.jdbc.ReadTimeout参数设置有问题。系统中一个以前配置了以下几个参数:1.blocking-timeout-millis 500ms2.query-timeout      180s3.idle-timeout-minutes   30m升级后增加了2个参数:1.ora...