JAVA数据库连接池的革命 -- 从BoneCP到HikariCP

从BoneCP到HikariCP

今天笔者本想更新一下项目中使用到的BoneCP版本的。却无意发现jolbox网站打不开了。起初以为是被墙掉了,经过一番查找,居然在BoneCP的Github站看到了如下的一段话:

BoneCP的作者不知何时修改了简述。(ps:红色框中的部分意思:虽然BoneCP性能优于老旧的C3PO和DBCP连接池,但是现在应该被舍弃了,以迎接HikariCP)

作者词语之间充满了悲凉之感,好比当年的少年侠客,风流倜傥,如今已是迟暮之年,不得不退出江湖,何其悲凉。

在笔者胡乱感伤一通过后,那么问题就来了。

HikariCP是虾米?

  Github主页:http://brettwooldridge.github.io/HikariCP/

  HikariCP是一个高效的数据库连接池。

  • One Connection Cycle is defined as single DataSource.getConnection()/Connection.close().

    • In Unconstrained benchmark, connections > threads.
    • In Constrained benchmark, threads > connections (2:1).
  • One Statement Cycle is defined as single Connection.prepareStatement(),Statement.execute(), Statement.close().

1 Versions: HikariCP 2.1.0, BoneCP 0.8.0, Tomcat 8.0.9, Vibur 1.2.0, C3P0 0.9.5-pre8, Java 8u20 
2 Java options: -server -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xmx512m

从HikariCP网站给出的对比图来看。其性能相比于BoneCP有了质的变化,革命性的变更。

笔者因为使用了Spring框架。所以更换使用HikariCP相当简单,只要将原本BoneCP的配置信息修改一下就好了。详细见下:

 1 <!-- HikariCP 高性能数据库连接池 -->
 2     <bean id="dataSourceHikari" class="com.zaxxer.hikari.HikariDataSource">
 3         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
 4         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/black1?useUnicode=true&amp;characterEncoding=UTF-8"/>
 5         <property name="username" value="root"/>
 6         <property name="password" value=""/>
 7         <!-- Default settings -->
 8         <!-- 控制自动提交行为 default:true -->
 9         <property name="autoCommit" value="true"/>
10         <!--连接池获取的连接是否只读 default:false-->
11         <property name="readOnly" value="false"/>
12         <!--控制连接的事务隔离等级 default:none-->
13         <property name="transactionIsolation" value="none"/>
14         <!--设置catalog以便于支持查看catalogs , 若不指定的话将直接使用 JDBC driver使用的 default:none-->
15         <property name="catalog" value="none"/>
16         <!--最大连接超时时间 default:30秒-->
17         <property name="connectionTimeout" value="30000"/>
18         <!--最大空闲超时时间 default:10分钟   -->
19         <property name="idleTimeout" value="600000"/>
20         <!--连接池中一个连接的最大生命周期 default:30分钟-->
21         <property name="maxLifetime" value="1800000 "/>
22         <!--  ...还有一些其他配置属性 有兴趣可以看看 O(∩_∩)O哈哈~ -->
23     </bean>

  Ps:笔者也是首次使用HikariCP类库。具体的性能和优越性暂时还不好下定论。但是相信HikariCP开发组能发表这样的对比图,想来未必是空穴来风,暂时使用一下,过段时间再来完善性能是否如图表所示。持续关注中。

  HikariCP官方网网的一些教程文档:https://github.com/brettwooldridge/HikariCP/wiki

  Maven :

  【JDK1.8】

1 <dependency>
2     <groupId>com.zaxxer</groupId>
3     <artifactId>HikariCP</artifactId>
4     <version>2.1.0</version>
5     <scope>compile</scope>
6 </dependency>

  【JDK1.6和1.7】:

1 <dependency>
2     <groupId>com.zaxxer</groupId>
3     <artifactId>HikariCP-java6</artifactId>
4     <version>2.1.0</version>
5     <scope>compile</scope>
6 </dependency>


作者
TinyZ
出处:http://www.cnblogs.com/zou90512/
关于作者:从事于网络游戏服务端开发(JAVA)。喜欢接触和了解新技术。通过不断探索学习,提升自身价值。记录经验分享。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接
如有问题,可以通过 [email protected] 联系我,非常感谢。
笔者网店: http://aoleitaisen.taobao.com. 欢迎围观

时间: 2024-10-23 14:33:08

JAVA数据库连接池的革命 -- 从BoneCP到HikariCP的相关文章

java数据库连接池性能对比

这个测试的目的是验证当前常用数据库连接池的性能. testcase Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.preparedStatement("select 1"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { } rs.close(); stmt.close(); conn.close(); test c

[转帖]为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用

为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用 原创Clement-Xu 发布于2015-07-17 15:53:14 阅读数 57066  收藏 展开 HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池. 原文地址:http://blog.csdn.net/clementad/article/details/46928621 官网:https://github.com/brettwooldridge/HikariCP 为何要使用H

Java数据库连接池

写了个 Java数据库连接池,具备基本的功能点: 1.对池中活动连接的重用. 2.池满时的适时等待. 3.对空闲连接的适时关闭. 抛砖引玉,不吝赐教. 源码文件 DBConnection.java 1 package db; 2 3 import java.sql.Connection; 4 import java.util.concurrent.atomic.AtomicBoolean; 5 6 /** 7 * 封装的连接 8 * @author Linkwork, [email protec

java数据库连接池dbcp的使用

近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开发模式逐渐取代C/S(Client/Server)架构的开发模式,成为开发企业级应用和电子商务普遍采用的技术. 在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁, 即Java语言通过JDBC技术访问数据库.JDBC是一种"开放"的方案,它

java 数据库连接池 Oracle版

首先应加入连接池和数据库连接的配置文件:数据库连接包:ojdbc6.jar数据库连接池包:commons-pool2-2.2.jar                       commons-dbcp2-2.0.jar数据库连接配置文件:config.properties使用连接池连接一定不要忘记关闭否则会很倒霉DBHelper 的写法 import java.io.IOException;import java.io.InputStream;import java.sql.Connectio

java数据库连接池实现原理

一.为什么在连接数据库时要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.  一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下. 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池(简单说:在一个"池"里放了好多半成品的数据库联接对象),由应用程序动态地对池中的连接进行申请.使用和释放.对于多于连接池中连接数的并发请求,应该在请求队列

一个效果非常不错的JAVA数据库连接池

package studytest; ////    一个效果非常不错的JAVA数据库连接池.//    from:http://www.jxer.com/home/?uid-195-action-viewspace-itemid-332//    虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,//    但是像这篇文章把数据库连接池的内部原理写的这么透彻,注视这么完整,//    真是非常难得,让开发人员可以更深层次的理解数据库连接池,真是非常感//    谢

Java数据库连接池详解

http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式正是为了解决资源的频繁分配﹑释放所造成的问题.为解决我们的问题,可以采用数据库连接池技术.数据库连接池的基本思想就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再放回去

为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用

HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池. 原文地址:http://blog.csdn.net/clementad/article/details/46928621 官网:https://github.com/brettwooldridge/HikariCP 为何要使用HiKariCP?这要先从BoneCP说起: 什么?不是有C3P0/DBCP这些成熟的数据库连接池吗?一直用的好好的,为什么又搞出一个BoneCP来?因为,传说中BoneCP在快速这个