当前位置: 首页 > 工具软件 > BoneCP > 使用案例 >

Bonecp 数据源 (1)

东方华荣
2023-12-01

bonecp 官网

为什么要学习BoneCP

java连接池发展了这么久,基本上已经都很稳定了,你看 C3P0 和 DBCP 都不再发布新版本了。而 BoneCP出彩的地方就是跟进了技术的最新进展。研究它的源码,发现有两个主要原因:

1. BoneCP 不用 synchronized 关键字来处理多线程对资源的争用,而是使用 java.util.concurrent 包中的锁机制,这个包是在 JDK 1.5 才开始有的

2. 分区机制,尽管使用了锁,但还是存在着资源争用的问题,因此 BoneCP 可配置多个连接池分区,每个分区独立管理,互不影响。尽管连接池的性能并不会是一个系统中的瓶颈,但是我们单纯从连接池这个角度来看 BoneCP ,也是值得我们去学习的。
 

 

特性

 

    1.高度可扩展, 快速的连接池.    注:1)不用synchronized 关键字来处理多线程对资源的争用,而是使用 java.util.concurrent 包中的锁机制;2)首次使用分区机制来分开管理数据库连接;或许还有其他原因.

    2.回调(钩子拦截器)机制在连接状态的改变上。

    3利用分区技术提高性能

    4.允许直接访问一个连接或者语句

    5.智能调整连接池大小

    6.SQL语句缓存支持

    7.支持异步获取数据库连接 (通过返回Future<Connection>的形式)

    8.通过释放连接助理进程来释放数据库连接,提高性能.

    9.通过initSQL参数在每次获取连接的时候执行SQL

    10.支持数据库热切换

    11.自动重试失败的数据库操作(当数据库或者网络挂掉的时候)

    12.JMX support

    13.延迟初始化能力(Lazy initialization capable)

    14.自动检测连接可用性 (keep-alives 等)

    15.允许直接通过数据源而不是通过驱动来获取一个新的数据库连接(Allow obtaining of new connections via a datasource rather than via a Driver)

    16.Datasource/Hibernate support capable

    17.Debug支持准确地高亮那些已经得到但是还没有关闭的链接(Debugging hooks to highlight the exact place where a connection was obtained but not closed)

    18.Debug支持展示那些被关闭两次的链接地址堆栈信息(Debugging support to show stack locations of connections that were closed twice. )

    19.支持自定义连接池名称.

    20.干净的代码结构,TestCase代码覆盖率达到100% (over 125 JUnit tests).

    21.免费的,开源的而且都是用java干的,最重要的是有很完整的javadocs支持。(Free, open source and written in 100% pure Java with complete Javadocs).

 

使用bonecp

pom.xml

<!-- bonecp 数据源 -->
	<dependency>  
            <groupId>com.jolbox</groupId>  
            <artifactId>bonecp</artifactId>  
            <version>0.7.1.RELEASE</version>  
        </dependency> 

application.xml

 <!--用于连接boneCp数据源 -->  
    <bean id="commonDataSourceConfig" class="com.jolbox.bonecp.BoneCPDataSource" abstract="true" destroy-method="close">  
        <!-- 每个分区最大的连接数 -->    
        <property name="maxConnectionsPerPartition" value="100" />    
        <!-- 每个分区最小的连接数 -->    
        <property name="minConnectionsPerPartition" value="10" />    
        <!-- 分区数 ,默认值2,最小1,推荐3-4,视应用而定-->    
        <property name="partitionCount" value="3" />    
        <!-- 每次去拿数据库连接的时候一次性要拿几个,默认值:2 -->    
        <property name="acquireIncrement" value="2" />  
        <!-- 测试连接有效性的间隔时间,单位分钟     
        <property name="idleConnectionTestPeriod" value="40" />-->  
        <!-- 空闲存活时间 分钟  
        <property name="idleMaxAge" value="10"/>-->  
        <!-- 连接超时时间 毫秒-->  
        <property name="connectionTimeoutInMs" value="10000"/>  
    </bean>  
   
    <!-- 数据源配置 -->  
    <bean id="dataSource" parent="commonDataSourceConfig">  
            <property name="driverClass" value="${jdbc.driver}"/>
	    <property name="jdbcUrl" value="${jdbc.url}"/>
	    <property name="username" value="${jdbc.username}"/>
	    <property name="password" value="${jdbc.password}"/>
    </bean> 

 

 

 

 

 

 

 

 

 

 

 

 类似资料: