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. 欢迎围观

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。