如下整理常用JDBC连接池组件。

HikariCP

针对不同的JDK需要引入对应的HikariCP,详见:Github项目地址

以JDK8为例子,在项目中引入如下依赖:

<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>

简单使用示例:

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
config.setUsername("bart");
config.setPassword("51mp50n");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); HikariDataSource ds = new HikariDataSource(config);

Druid

Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能,详见:Druid连接池介绍

在项目中添加如下依赖配置:

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.15</version>
</dependency>

简单使用示例:

DruidDataSource dataSource = new DruidDataSource();
// 连接数据库的url
dataSource.setUrl("jdbc:mysql://localhost:3306/simpsons");
// 连接数据库的用户名
dataSource.setUsername("bart");
// 连接数据库的密码
dataSource.setPassword("51mp50n"); // 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
// 监控统计用的filter:stat
// 日志用的filter:log4j
// 防御sql注入的filter:wall
dataSource.setFilters("stat");
// 最大连接池数量
dataSource.setMaxActive(20);
// 初始化时建立物理连接的个数,初始化发生在显示调用init方法,或者第一次getConnection时
dataSource.setInitialSize(1);
// 获取连接时最大等待时间,单位毫秒
// 配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
dataSource.setMaxWait(6000);
//dataSource.setMaxIdle(1); // 有两个含义:
// 1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
// 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
dataSource.setTimeBetweenEvictionRunsMillis(60000);
// 连接保持空闲而不被驱逐的最小时间
dataSource.setMinEvictableIdleTimeMillis(300000); // 建议配置为true,不影响性能,并且保证安全性。
// 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
dataSource.setTestWhileIdle(true);
// 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
dataSource.setTestOnBorrow(false);
// 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
dataSource.setTestOnReturn(false); // 是否缓存preparedStatement,也就是PSCache。
// PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。
dataSource.setPoolPreparedStatements(true);
// 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
// 在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
dataSource.setMaxOpenPreparedStatements(20); // 异步初始化
dataSource.setAsyncInit(true);

在与Spring框架集成使用时,还支持使用xml文件格式进行配置,参考:DruidDataSource配置

Tomcat JDBC Pool

这是Tomcat组件提供的一个连接池,可以单独使用。

关于Tomcat JDBC连接池的使用,每个版本的Tomcat都有专门的说明,以Tomcat 10为例,参考:The Tomcat JDBC Connection Pool

在项目中添加如下依赖:

<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>10.1.10</version>
</dependency>

简单使用示例:

PoolProperties p = new PoolProperties();
p.setUrl("jdbc:mysql://localhost:3306/mysql");
p.setDriverClassName("com.mysql.jdbc.Driver");
p.setUsername("root");
p.setPassword("password");
p.setJmxEnabled(true);
p.setTestWhileIdle(false);
p.setTestOnBorrow(true);
p.setValidationQuery("SELECT 1");
p.setTestOnReturn(false);
p.setValidationInterval(30000);
p.setTimeBetweenEvictionRunsMillis(30000);
p.setMaxActive(100);
p.setInitialSize(10);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(60);
p.setMinEvictableIdleTimeMillis(30000);
p.setMinIdle(10);
p.setLogAbandoned(true);
p.setRemoveAbandoned(true);
p.setJdbcInterceptors(
"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+
"org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
DataSource datasource = new DataSource();
datasource.setPoolProperties(p);

常用JDBC连接池的更多相关文章

  1. 自定义一个简单的JDBC连接池

    一.什么是JDBC连接池? 在传统的JDBC连接中,每次获得一个Connection连接都需要加载通过一些繁杂的代码去获取,例如以下代码: public static Connection getCo ...

  2. 四大流行的jdbc连接池之C3P0篇

    C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSourc ...

  3. Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介

    日常啰嗦 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和da ...

  4. JDBC连接池-C池3P0连接

    JDBC连接池-C3P0连接 c3p0连接池的学习英语好的看英文原版      c3p0 - JDBC3 Connection and Statement Pooling 使用c3p0连接池  三种方 ...

  5. JDBC连接池(三)DBCP连接池

    JDBC连接池(三)DBCP连接池 在前面的随笔中提到 了  1.JDBC自定义连接池  2. C3P0连接池 今天将介绍DBCP连接池 第一步要导入jar包   (注意:mysql和mysql 驱动 ...

  6. JDBC连接池-自定义连接池

    JDBC连接池 java JDBC连接中用到Connection   在每次对数据进行增删查改 都要 开启  .关闭  ,在实例开发项目中 ,浪费了很大的资源 ,以下是之前连接JDBC的案例 pack ...

  7. Jmeter(九)JDBC连接池

    JDBC为java访问数据库提供通用的API,可以为多种关系数据库提供统一访问.因为SQL是关系式数据库管理系统的标准语言,只要我们遵循SQL规范,那么我们写的代码既可以访问MySQL又可以访问SQL ...

  8. jdbc连接池&改进dbUtil成C3P0Util

    一.jdbc连接池 1.连接池的存在理由   前面介绍的dbUtils工具类虽然实现了一个对jdbc的简单封装.但它依旧采取从驱动管理获取连接 (DriverManager.getConnection ...

  9. Tomcat 的 JDBC 连接池

    JDBC 连接池 org.apache.tomcat.jdbc.pool 是 Apache Commons DBCP 连接池的一种替换或备选方案. 那究竟为何需要一个新的连接池? 原因如下: Comm ...

  10. 【JDBC&Dbutils】JDBC&JDBC连接池&DBUtils使用方法(重要)

    -----------------------JDBC---------- 0.      db.properties文件 driver=com.mysql.jdbc.Driver url=jdbc: ...

随机推荐

  1. 【转帖】nginx变量使用方法详解-6

    https://www.diewufeiyang.com/post/580.html Nginx 内建变量用在"子请求"的上下文中时,其行为也会变得有些微妙. 前面在 (三) 中我 ...

  2. [转帖]如何理解 iowait

    Linux中,%iowait 过高可能是个问题,严重的时候,它能使服务停止, 但问题是,多高才算高? 什么时候应该担心呢? 本文将讨论 iowait 的含义.相关的统计数据.原理以及 iowait的瓶 ...

  3. Vant中List列表下拉加载更多

    van-list上只有一层父级元素div,多了可能下拉加载出不来:或者更多 <template> <div class="scholl-declarepage"& ...

  4. 【代码分享】使用 terraform, 在 Let's Encrypt 上申请托管在 cloudflare 上的域名对应的证书

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 运行的流程可以抽象为上图. 直接贴代码: letsencr ...

  5. 【三】AI Studio 项目详解——单机多机训练分布式训练--PARL

    相关文章 [一]-环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简介 [五]-Sarsa&Qlear ...

  6. C/C++ Qt 编译打包项目

    Qt程序编译后,需要去qt目录拷贝几个文件,与qt程序放在一起该程序才可以脱离开发环境而独立运行下去,在开发环境下编译好代码以后,还需要进行以下操作将其打包才可以在别的机器上正常运行. QT的下载地址 ...

  7. 从嘉手札<2023-11-13>

    1. 很多时候 成功并不等同于成长 成功是很多因素复合形成的一种结果 而并不等同于一个人阅历的丰富.认知的提高 2. 我一直认为 世界不属于投机者 也不属于堕落者 信念感在这个大数据泛滥.碎片化汹涌的 ...

  8. GJK算法:两个凸集的碰撞测试

      GJK算法用于判断两个凸集是否相交,其中GJK是三个提出者的姓名首字母.为了便于理解(偷懒),下面的内容都只在二维平面内讨论. 1. 回顾凸集   可能有很多小伙伴忘了什么是凸集.凸集有很多等价的 ...

  9. 单片机 IAP 功能进阶开发篇之BOOT升级(一)

    引言 目的 主要介绍单片机 IAP 开发的设计思路,如何不使用下载烧录器的方式对单片机的程序进行升级,升级区域包括 bootloader 和用户程序的升级,升级方式有 UASRT 通信.CAN 通信和 ...

  10. Delphi库单元结构

    单元(unit)是组成Pascal 程序的单独的源代码模块,单元由函数和过程组成,这些函数和过程能被主程序调用. 一个标准的单元文件格式如下: unit Unit1: //单元头 interface ...