BoneCP 学习笔记

数据库连接池 BoneCP、HikariCP 等 Tomcat 在 7.0 以前都是使用 common-dbcp 做为连接池组件,但是 dbcp 是单线程,为保证线程安全会锁整个连接池,性能较差,dbcp有超过60个类,也相对复杂。大型系统一般都有专门的监控类软件,如 skywalking、prometheus 等,因此连接池只需要做好的他的本职工作即可,应该更加关注连接池的性能。LRU 是思路是,最近使用过的缓存被认为是有用的,很久都没用过的数据应该是无用的,当内存空间不足时,应该优先淘汰很久没使用过的缓存。这样的场景,性能可能是一个数量级的提升。 阅读详情

什么是BoneCP

BoneCP 是一个快速、免费而且开源的java数据库连接池(JDBC Pool)管理工具库。如果你曾经使用过C3P0或者DBCP,那你肯定知道上面这句话的意思;如果你没用过这些,那简单的解释一下,它是一个能为你的应用管理数据库连接的工具。

 

官方网站:http://jolbox.com/

 

为什么要学习BoneCP

 

本着不重复发明轮子的原则,不应该在有了C3P0这种成熟的数据库连接池管理工具后再搞个新的出来,但是传说中BoneCP在快速这个特点上做到了极致,官方数据是C3P0等的25倍左右。不相信?其实我也不怎么信,正找时间自己写测试类测试呢,你也可以去试试看, 在这里下载(现在最新版本0.6.7.2,如果你有困难,下面会具体提到在项目中怎么配置)

 

好吧,先看一下官方给出的华丽数据:

1.    单线程(1,000,000获得及释放数据库连接请求,连接池大小20-50)

 2.    多线程(500线程分别获取释放100个链接,连接池大小50-200)


3.    Prepared Statement (multi-threaded)(500个线程每个100次获得/释放,连接池大小20-500)


这里只应用了部分,还有其他比较多的测试数据,有兴趣就去这里瞧瞧吧。个人还是建议自己写点代码测试一下,那样感受更深啊。

 

在介绍怎么使用之前,先来看看BoneCP的特性(Features):

  • 高度可扩展, 快速的连接池.    注:1)不用synchronized 关键字来处理多线程对资源的争用,而是使用 java.util.concurrent 包中的锁机制;2)首次使用分区机制来分开管理数据库连接;或许还有其他原因.
  • Callback (hook interceptor) mechanisms on a change of connection state.
  • 利用分区技术提高性能
  • 允许直接访问一个连接或者语句
  • 智能调整连接池大小
  • SQL语句缓存支持
  • 支持异步获取数据库连接 (通过返回Future<Connection>的形式)
  • 通过释放连接助理进程来释放数据库连接,提高性能.
  • 通过initSQL参数在每次获取连接的时候执行SQL
  • 支持数据库热切换
  • 自动重试失败的数据库操作(当数据库或者网络挂掉的时候)
  • JMX support
  • 延迟初始化能力(Lazy initialization capable)
  • 自动检测连接可用性 (keep-alives 等)
  • 允许直接通过数据源而不是通过驱动来获取一个新的数据库连接(Allow obtaining of new connections via a datasource rather than via a Driver)
  • Datasource/Hibernate support capable
  • Debug支持准确地高亮那些已经得到但是还没有关闭的链接(Debugging hooks to highlight the exact place where a connection was obtained but not closed)
  • Debug支持展示那些被关闭两次的链接地址堆栈信息(Debugging support to show stack locations of connections that were closed twice. )
  • 支持自定义连接池名称.
  • 干净的代码结构,TestCase代码覆盖率达到100% (over 125 JUnit tests).
  • 免费的,开源的而且都是用java干的,最重要的是有很完整的javadocs支持。(Free, open source and written in 100% pure Java with complete Javadocs).

      本人鸟语有限,有些翻译不是很好,请见谅

 

好了,废话说的挺多的,看看到底怎么用吧。

怎么使用BoneCP

 

我是Maven的忠实拥护者,如果你也是,那就简单了:
你可以在你的settings.xml文件里加上下面一段,声明一个Maven仓库,如果你不想影响其他项目,那也可以在你项目的pom.xml文件里面加。

Xml代码   收藏代码
  1. <repositories>  
  2.     <repository>  
  3.         <releases>  
  4.             <enabled>true</enabled>  
  5.         </releases>  
  6.         <id>bonecp-repo</id>  
  7.         <name>BoneCP Repository</name>  
  8.         <url>http://jolbox.com/bonecp/downloads/maven</url>  
  9.     </repository>  
  10. </repositories>  

然后你就可以像引用其他jar包一样引用bonecp了,下面应该很熟悉

Xml代码   收藏代码
  1. <dependency>  
  2.     <groupId>com.jolbox</groupId>  
  3.     <artifactId>bonecp</artifactId>  
  4.     <version>0.6.7.2</version>  
  5. </dependency>  

 如果你的项目直接用类似Hibernate的东东,没有配置dataSource的话,你很牛,那就加上下面这个吧

Xml代码   收藏代码
  1. <dependency>  
  2.     <groupId>com.jolbox</groupId>  
  3.     <artifactId>bonecp-provider</artifactId>  
  4.     <version>0.6.7.2</version>  
  5. </dependency>  

 如果这些都没有满足你,那参考这里吧。

 

如果你不用Spring,那应该是这样写吧:

Java代码   收藏代码
  1. Class.forName("org.hsqldb.jdbcDriver");     // load the DB driver  
  2. BoneCPConfig config = new BoneCPConfig();   // create a new configuration object  
  3. config.setJdbcUrl("jdbc:hsqldb:mem:test");  // set the JDBC url  
  4. config.setUsername("sa");           // set the username  
  5. config.setPassword("");             // set the password  
  6. config.setXXXX(...);                // (other config options here)  
  7. BoneCP connectionPool = new BoneCP(config);     // setup the connection pool  
  8. Connection connection;  
  9. connection = connectionPool.getConnection();    // fetch a connection  
  10.   
  11. ...  do something with the connection here ...  
  12.   
  13. connection.close();             // close the connection  
  14. connectionPool.shutdown();          // close the connection pool  

 

BoneCP-Spring详细配置

主要讲一下在Spring下面怎么配置,其实更简单,只要配置dataSrouce就可以搞定。如下,具体含义见注释。

 

Xml代码   收藏代码
  1. <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"  
  2.         destroy-method="close">  
  3.         <!-- 数据库驱动 -->  
  4.         <property name="driverClass" value="${aliLibrary.db.driverClass}" />  
  5.         <!-- 相应驱动的jdbcUrl,你懂的 -->  
  6.         <property name="jdbcUrl" value="${aliLibrary.db.jdbcUrl}" />  
  7.         <!-- 数据库的用户名 -->  
  8.         <property name="username" value="${aliLibrary.db.username}" />  
  9.         <!-- 数据库的密码 -->  
  10.         <property name="password" value="${aliLibrary.db.password}" />  
  11.         <!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->  
  12.         <property name="idleConnectionTestPeriod" value="${aliLibrary.db.idleConnectionTestPeriod}" />  
  13.         <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->  
  14.         <property name="idleMaxAge" value="${aliLibrary.db.idleMaxAge}" />  
  15.         <!-- 每个分区最大的连接数 -->  
  16.         <property name="maxConnectionsPerPartition" value="${aliLibrary.db.maxConnectionsPerPartition}" />  
  17.         <!-- 每个分区最小的连接数 -->  
  18.         <property name="minConnectionsPerPartition" value="${aliLibrary.db.minConnectionsPerPartition}" />  
  19.         <!-- 分区数 ,默认值2,最小1,推荐3-4,视应用而定-->  
  20.         <property name="partitionCount" value="${aliLibrary.db.partitionCount}" />  
  21.         <!-- 每次去拿数据库连接的时候一次性要拿几个,默认值:2 -->  
  22.         <property name="acquireIncrement" value="${aliLibrary.db.acquireIncrement}" />  
  23.         <!-- 缓存prepared statements的大小,默认值:0 -->  
  24.         <property name="statementsCacheSize" value="${aliLibrary.db.statementsCacheSize}" />  
  25.         <!-- 每个分区释放链接助理进程的数量,默认值:3,除非你的一个数据库连接的时间内做了很多工作,不然过多的助理进程会影响你的性能 -->  
  26.         <property name="releaseHelperThreads" value="${aliLibrary.db.releaseHelperThreads}" />  
  27.     </bean>  

 其他还有些不是很常用的包括:

Java代码   收藏代码
  1. connectionTestStatement:在做keep-alive的时候的SQL语句。  
  2. statementsCachedPerConnection:No of statements that can be cached per connection,反正源码中不推荐使用,就别用了.  
  3. initSQL:在每次到数据库取连接的时候执行的SQL语句,只执行一次。  
  4. closeConnectionWatch:如果设置为true,则会增加一个线程监控关闭连接时的情况,如果关闭时出现异常,则打出错误日志,主要用于debug。上线后记得关掉。  
  5. logStatementsEnabled:如果设置为true,就会打印执行的SQL语句,如果你用了其他能打印SQL语句的框架,那就不必了。  
  6. acquireRetryDelay:在获取连接失败后,第二次参试前的延迟时间,默认为7000毫秒。  
  7. acquireRetryAttempts:在获取连接失败后的重试次数,默认为5次。  
  8. lazyInit:如果设置为true,那么连接池不会自动创建最小连接数的链接,而是保持为空,直到有需求要获取连接。  
  9. transactionRecoveryEnabled:如果设置为true,则会保存该链接上的所有活动,以备下次重试的时候使用,这里指的活动是数据库操作。  
  10. connectionHookClassName:Connection hook class name.没看懂…  
  11. poolName:上面特性中说到的自定义连接池名称。  
  12. disableJMX:控制JMX的支持开关。  
  13. connectionTimeout:获取连接的时候最大的等待时间,默认值为:Long.MAX_VALUE  
 

    Spring里面怎么用这个dataSource就不说了吧,今天重点在BoneCP。

 

最后跑一个TestCase,看看日志

初始化的时候打印出BoneCP的配置参数,很清楚,关闭的时候也有日志输出。

Java代码   收藏代码
  1. 2010-08-02 15:10:22,457 [BoneCPDataSource.java:121] [com.jolbox.bonecp.BoneCPDataSource] DEBUG com.jolbox.bonecp.BoneCPDataSource :: JDBC URL = jdbc:mysql://10.249.128.109:3306/ali_library, Username = root, partitions = 3, max (per partition) = 3, min (per partition) = 3, helper threads = 3, idle max age = 240 min, idle test period = 30 min  
  2. 2010-08-02 15:10:22,457 [BoneCPDataSource.java:121] [com.jolbox.bonecp.BoneCPDataSource] DEBUG com.jolbox.bonecp.BoneCPDataSource :: JDBC URL = jdbc:mysql://10.249.128.109:3306/ali_library, Username = root, partitions = 3, max (per partition) = 3, min (per partition) = 3, helper threads = 3, idle max age = 240 min, idle test period = 30 min  
  3. 2010-08-02 15:10:45,958 [BoneCP.java:129] [com.jolbox.bonecp.BoneCP] INFO  com.jolbox.bonecp.BoneCP :: Shutting down connection pool...  
  4. 2010-08-02 15:10:45,958 [BoneCP.java:129] [com.jolbox.bonecp.BoneCP] INFO  com.jolbox.bonecp.BoneCP :: Shutting down connection pool...  
  5. 2010-08-02 15:10:45,973 [BoneCP.java:145] [com.jolbox.bonecp.BoneCP] INFO  com.jolbox.bonecp.BoneCP :: Connection pool has been shutdown.  
  6. 2010-08-02 15:10:45,973 [BoneCP.java:145] [com.jolbox.bonecp.BoneCP] INFO  com.jolbox.bonecp.BoneCP :: Connection pool has been shutdown.  
 
unity 腾讯地图sdk移动和缩放代码 unity 腾讯地图sdk 实现移动端 缩放 和 移动 阅读详情

相关推荐

一窥Memory测试算法及自我修复机制

摘要 为了满足新一代设备的需求,Memory的大小每三年就会增加4倍。深亚微米设备包含大量面积更小、访问速度更快的Memory。针对此类设计制定自动测试策略可以减少ATE(自动测试设备)的时间和成本。 内存故障的行为与经典的“Stuck-At”故障不同。因此,Memory的故障模型(由于其阵列结构)与标准逻辑的设计也是不同的。Memory测试除了进行故障检测和定位,还可以实现用冗余单元对...

路科验证 2万+

BoneCP连接池配置参数详细说明

 参数意义说明一 BoneCP主要配置参数 1jdbcUrl 设置数据库URL  2username设置数据库用户名  3password设置数据库密码 4partitionCount设置分区个数。这个参数默认为1,建议3-4(根据特定应用程序而定)。为了减少锁竞争和改善性能,从当前线程分区(thread-affinity)中获取一个connection,也就是这个样子:partitions[Th...

花飘万家雪 1852

Informer:比Transformer更有效的长时间序列预测

目录 AAAI 2021最佳论文:比Transformer更有效的长时间序列预测 Background Why attention Methods:the details of Informer Solve_Challenge_1:最基本的一个思路就是降低Attention的计算量,仅计算一些非常重要的或者说有代表性的Attention即可,一些相近的思路在近期不断的提出,比如Sparse-Attention,这个方法涉及了稀疏化Attention的操作,来减少Attention计算量,然后涉及的

To be a better man 1万+

BoneCp简单了解

1.BoneCPDataSource 2.BoneCPConfig 3.BoneCP 4.ConnectionPartition 5.ConnectionHandle

迷茫海燕的专栏 1231

IDEA中Maven工具栏与命令执行全攻略:高效开发必备技巧

IntelliJ IDEA 作为强大的 Java 开发工具,其 Maven 功能独具优势。Maven 工具栏位于工作区右侧,图标功能丰富,涵盖项目导入、源码处理、依赖操作等。执行 Maven 命令有多种途径,Run Anything 窗口可输入或选目标执行,上下文菜单能右键运行目标,还可创建运行配置,指定命令参数后运行,为开发者高效管理 Maven 项目、便捷执行命令提供有力支持。

2301_82300081的博客 2028

在overleaf中使用bibtex引用参考文献

最近在挑选写tex的平台,挑来挑去,个人感觉overleaf给我带来的体验感是最舒适的。不过由于对内部的文件组织和make进行了一层封装,所以与一般的本地平台编译tex会有一点不同。此处写一下在overleaf中使用bibtex的方法。 在tex中使用bibtex引用文献是一件很舒适的事,毕竟这是tex的优点之一(要是tex比word难用,我干什么不去用word,hhh) 第一步,我们创建一个.bib文件,名字随便起,我这边起为reference.bib。 然后打开谷歌学术,搜索你想要引用的文章,并找到

锦恢的博客 4万+

BoneCP百科

  BoneCP是一个快速的、免费的、开源的、Java数据库连接池(JDBC池)库。与C3P0和DBCP功能相似,它是一个库,能管理程序里的数据库连接,加快数据库访问。目前它成功地集成了持久性产品,如Hibernate和DataNucleus,也支持spring配置。     1.高度可伸缩的、快速的连接池 2.基于连接状态改变的回调机制 3.通过分区功能来提高性能 4.允许直接访...

aoeace 543

【华为OD机试真题 2025B卷】737、统计监控器、需要打开多少监控器 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS)

【华为OD机试真题 2025B卷】737、统计监控器、需要打开多少监控器 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为

KJ.JK 715

BoneCP学习笔记——配置参数

<br />BoneCP学习笔记——配置参数

amgang的专栏 283

CMake是什么?为什么学习CMake

CMake的主要作用和重要性,包括其在跨平台构建中的应用、如何支持多种编译器及操作系统,以及它在管理大型和复杂项目中的优势。

小鱼酱的博客 3866

零基础入门篇③ PyCharm使用指南(个性化设置、开发必备插件、常用快捷键)

Python从入门到精通👉零基础入门篇③

hacker707的博客 4371

BoneCP学习笔记

什么是BoneCPBoneCP 是一个快速、免费而且开源的java数据库连接池(JDBC Pool)管理工具库。如果你曾经使用过C3P0或者DBCP,那你肯定知道上面这句话的意思;如果你没用过这些,那简单的解释一下,它是一个能为你的应用管理数据库连接的工具。官方网站:http://jolbox.com/ 为什么要学习BoneCP本着不重复发明轮子的原则,不应该在有了C3P0这种成熟的数据库连接池管理工具后再搞个新的出来,但是传说中BoneCP在快速这个特点上做到了极致,官方数据是C3P0等的25倍左右。不相

让快节奏的都市生活泛出一丝乐趣 5093

本地生成无限量的AI图像和视频——无需网络,无限制,本地人工智能图像和视频生成的实用指南

我们将使用ComfyUI,这是一个功能强大的基于节点的 AI 图像和视频生成可视化界面。如果您是 ComfyUI 的新手,请不要担心。ComfyUI是什么?ComfyUI 是一款可视化工具,可让您在自己的计算机上生成 AI 图像和视频。您无需一次性理解所有内容。在本指南中,我们将从现成的工作流程入手,逐步帮助您建立信心。乍一看,内容似乎很庞杂——但本指南将着重于:-简单的工作流程-预构建示例-最少的配置我想向你展示使用这个工具最简单的工作流程。

iCloudEnd的博客 1798

boneCP学习笔记

什么是BoneCP BoneCP 是一个快速、免费而且开源的java数据库连接池(JDBC Pool)管理工具库。如果你曾经使用过C3P0或者DBCP,那你肯定知道上面这句话的意思;如果你没用过这些,那简单的解释一下,它是一个能为你的应用管理数据库连接的工具。   官方网站:http://jolbox.com/   为什么要学习BoneCP   本着不重复发明轮子的原则,不应...

hzgzf的博客 186

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

学习笔记BoneCP

如果项目与数据库突然断开,BoneCP连接池可以自动重新建立新的数据库连接,但这些错误的连接不会马上被丢弃。而是由使用者使用错误连接出错后,再由BoneCP进行测试,测试失败的连接才会被抛弃。 当JdbcTemplate.execute(StatementCallback action)调用到 stmt.executeQuery(sql)并出错时,StatementHandle会标记Con...

didixp的专栏 193

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

BONECP学习笔记

什么是BoneCP BoneCP 是一个快速、免费而且开源的java数据库连接池(JDBC Pool)管理工具库。如果你曾经使用过C3P0或者DBCP,那你肯定知道上面这句话的意思;如果你没用过这些,那简单的解释一下,它是一个能为你的应用管理数据库连接的工具。   官方网站:http://jolbox.com/   为什么要学习BoneCP   本着不重复

lijiangJava的博客 354

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: commons lang使用
下一篇: Git学习教程
架构师的清醒
博客等级 码龄14年 291粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值