c3p0,dbcp,proxool的三种数据源的使用

本文详细介绍了数据库连接池DBCP、C3P0、Proxool和BoneCP的配置参数,包括驱动、URL、用户名、密码等基本配置,以及连接池最大连接数、最大空闲连接数、最小空闲连接数、初始化连接数、等待时间等高级配置。同时,对比了这些连接池在实际应用中遇到的问题与解决策略,最后讨论了它们之间的优劣,并指出当前SSH中连接池推荐使用Proxool的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dbcp:
在applicationContext.xml中配置,
Java代码  收藏代码
  1. <bean id="dataSource"  
  2.         class="org.apache.commons.dbcp.BasicDataSource">  
  3.         <property name="driverClassName">  
  4.         <value>oracle.jdbc.driver.OracleDriver</value>  
  5.         </property>  
  6.             <property name="url">  
  7.         <value>jdbc:oracle:thin:@192.168.1.110:1521:orcl</value>   
  8.             </property>  
  9.             <property name="username">  
  10.               <value>用户名</value>  
  11.             </property>  
  12.             <property name="password">  
  13.               <value>密码</value>  
  14.             </property>  
  15.   
  16.         <property name="maxActive">  
  17.             <value>50</value>  
  18.         </property>  
  19.         <property name="maxIdle">  
  20.             <value>2</value>  
  21.         </property>  
  22.         <property name="maxWait">  
  23.             <value>120000</value>  
  24.         </property>  
  25.         <property name="defaultAutoCommit">  
  26.             <value>false</value>  
  27.         </property>  
  28.   
  29.         <property name="testOnBorrow">  
  30.             <value>true</value>  
  31.         </property>  
  32.   
  33.         <property name="testOnReturn">  
  34.             <value>false</value>  
  35.         </property>  
  36.   
  37.         <property name="validationQuery">  
  38.             <value>select 1 from dual</value>  
  39.         </property>  
  40.     </bean>  

driverClassName
url
username
password
上面四个分别是驱动,连接字符串,用户名和密码

maxActive 连接池支持的最大连接数
maxIdle 连接池中最多可空闲maxIdle个连接
minIdle 连接池中最少空闲maxIdle个连接
initialSize 初始化连接数目
maxWait 连接池中连接用完时,新的请求等待时间,毫秒
timeBetweenEvictionRunsMillis timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每

timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止

minEvictableIdleTimeMillis 连接池中连接可空闲的时间,毫秒

removeAbandoned true,false,是否清理removeAbandonedTimeout秒没有使用的活动连接,清理后并没有放回连接池
removeAbandonedTimeout 活动连接的最大空闲时间
logAbandoned true,false,连接池收回空闲的活动连接时是否打印消息


minEvictableIdleTimeMillis,removeAbandonedTimeout这两个参数针对的连接对象不一样,minEvictableIdleTimeMillis针对连接池中的连接对象,removeAbandonedTimeout针对未被close的活动连接.

在dbcp使用中遇到的问题:
当短时间之内活动连接达到maxActive,再请求连接,等maxWait秒后连接池就会报出错来:Cannot get a connection, pool exhausted.在这maxWait秒里removeAbandoned并没有起作用,出错后连接池就会把所有的连接断开,为什么这时候removeAbandoned没有起作用呢?
弊端:日前,Hibernate官方宣布由于Bug太多不再支持DBCP,而推荐使用 Proxool或C3P0。


c3p0:
在tomcat/config/service.xml
Java代码  收藏代码
  1. <Resource name="jdbc/hb" auth="Container" type="com.mchange.v2.c3p0.ComboPooledDataSource" />  
  2.    <ResourceParams name="jdbc/hb">   
  3.    <parameter>  
  4.    <name>factory</name>  
  5.    <value>org.apache.naming.factory.BeanFactory</value>  
  6.    </parameter>  
  7.    <parameter>  
  8.    <name>driverClass</name>  
  9.    <value>oracle.jdbc.driver.OracleDriver</value>  
  10.    </parameter>   
  11.    <parameter>  
  12.    <name>jdbcUrl</name>  
  13.    <value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>  
  14.    </parameter>   
  15.    <parameter>  
  16.    <name>user</name>  
  17.    <value>hb</value>  
  18.    </parameter>  
  19.    <parameter>  
  20.    <name>password</name>  
  21.    <value>hb</value>  
  22.    </parameter>   
  23.    <parameter>  
  24.    <name>minPoolSize</name>  
  25.    <value>30</value>  
  26.    </parameter>   
  27.    <parameter>  
  28.    <name>maxPoolSize</name>  
  29.    <value>200</value>  
  30.    </parameter>  
  31.    <parameter>  
  32.    <name>initialPoolSize</name>  
  33.    <value>30</value>  
  34.    </parameter>  
  35.    <parameter>  
  36.    <name>acquireIncrement</name>  
  37.    <value>30</value>  
  38.    </parameter>  
  39.    <parameter>  
  40.    <name>idleConnectionTestPeriod</name>  
  41.    <value>60</value>  
  42.    </parameter>  
  43.    <parameter>  
  44.    <name>maxIdleTime</name>  
  45.    <value>60</value>  
  46.    </parameter>  
  47.    </ResourceParams>  

driverClass
jdbcUrl
user
password
minPoolSize
maxPoolSize
initialPoolSize

acquireIncrement 池中没有空闲连接时,一次请求获取的连接数
maxIdleTime 池中连接最大空闲时间
acquireRetryAttempts 获取连接失败后,重新尝试的次数
acquireRetryDelay 尝试连接间隔时间,毫秒
checkoutTimeout 等待连接时间,0为无限等待,毫秒
DebugUnreturnedConnectionStackTraces true,false,是否收回未返回的活动连接
unreturnedConnectionTimeout 活动连接的时间.
DBCP,C3P0,Proxool,BoneCP参数介绍
c3p0的最大空闲时间为什么不起作用。(新dbcp问题)
DBCP连接池配置参数说明及优化

driverClassName
url
username
password
上面四个分别是驱动,连接字符串,用户名和密码

maxActive 连接池支持的最大连接数
maxIdle 连接池中最多可空闲maxIdle个连接
minIdle 连接池中最少空闲maxIdle个连接
initialSize 初始化连接数目
maxWait 连接池中连接用完时,新的请求等待时间,毫秒
timeBetweenEvictionRunsMillis timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每

timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止

minEvictableIdleTimeMillis 连接池中连接可空闲的时间,毫秒

removeAbandoned true,false,是否清理removeAbandonedTimeout秒没有使用的活动连接,清理后并没有放回连接池
removeAbandonedTimeout 活动连接的最大空闲时间
logAbandoned true,false,连接池收回空闲的活动连接时是否打印消息


minEvictableIdleTimeMillis,removeAbandonedTimeout这两个参数针对的连接对象不一样,minEvictableIdleTimeMillis针对连接池中的连接对象,removeAbandonedTimeout针对未被close的活动连接.

在dbcp使用中遇到的问题:
当短时间之内活动连接达到maxActive,再请求连接,等maxWait秒后连接池就会报出错来:Cannot get a connection, pool exhausted.在这maxWait秒里removeAbandoned并没有起作用,出错后连接池就会把所有的连接断开,为什么这时候removeAbandoned没有起作用呢?


c3p0:
driverClass
jdbcUrl
user
password
minPoolSize
maxPoolSize
initialPoolSize

acquireIncrement 池中没有空闲连接时,一次请求获取的连接数
maxIdleTime 池中连接最大空闲时间
acquireRetryAttempts 获取连接失败后,重新尝试的次数
acquireRetryDelay 尝试连接间隔时间,毫秒
checkoutTimeout 等待连接时间,0为无限等待,毫秒
DebugUnreturnedConnectionStackTraces true,false,是否收回未返回的活动连接
unreturnedConnectionTimeout 活动连接的时间.

c3p0中的问题:
unreturnedConnectionTimeout是给每个活动连接一个时间限制,到点儿就收回,不管有没有正在使用连接.这样不是太好,应该是从最后一次使用连接才开始计时才好.那有没有这样的一个参数从最后一次使用计时呢? .

c3p0与dbcp区别:
  dbcp没有自动的去回收空闲连接的功能   c3p0有自动回收空闲连接功能

proxool
在src下面proxool.xml文件中
Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <something-else-entirely>    
  3.     <proxool>    
  4.         <alias>DBPool</alias>    
  5.         <driver-url>  
  6.             jdbc:oracle:thin:@192.168.1.110:1521:sttri  
  7.         </driver-url>    
  8.         <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>    
  9.         <driver-properties>  
  10.             <property name="user" value="用户名" />    
  11.             <property name="password" value="密码" />    
  12.         </driver-properties>  
  13.         <!-- 连接最大活动时间(毫秒)-->   
  14.         <maximum-active-time>120000</maximum-active-time>    
  15.         <!-- 连接最大生命时间 (毫秒)-->  
  16.         <maximum-connection-lifetime>36000000</maximum-connection-lifetime>    
  17.         <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 -->   
  18.         <house-keeping-sleep-time>60000</house-keeping-sleep-time>  
  19.         <!-- 并发数 -->  
  20.         <simultaneous-build-throttle>200</simultaneous-build-throttle>    
  21.           
  22.         <!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->   
  23.         <maximum-new-connections>20</maximum-new-connections>  
  24.                   
  25.         <!-- 每次新增连接数 -->    
  26.         <prototype-count>2</prototype-count>    
  27.         <!--允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->    
  28.         <maximum-connection-count>300</maximum-connection-count>    
  29.         <!-- 最少保持的空闲连接数 -->    
  30.         <minimum-connection-count>5</minimum-connection-count>  
  31.           
  32.         <house-keeping-test-sql>select sysdate from dual </house-keeping-test-sql>   
  33.         <!--   
  34.         <statistics>15s,10m,1d</statistics>  
  35.         <statistics-log-level>INFO</statistics-log-level>  
  36.          -->  
  37.     </proxool>    
  38. </something-else-entirely>    

在src下的hibernage.cfg.xml
Java代码  收藏代码
  1. <session-factory>  
  2.       
  3.         <property name="hibernate.proxool.pool_alias">    
  4.             DBPool    
  5.     </property>    
  6.     <property name="hibernate.proxool.xml">proxool.xml</property>    
  7.     <property name="hibernate.connection.provider_class">    
  8.             org.hibernate.connection.ProxoolConnectionProvider    
  9.     </property>  
  10.       
  11.     <property name="hibernate.proxool.existing_pool">false</property>    
  12.     <property name="dialect">  
  13.             org.hibernate.dialect.OracleDialect  
  14.     </property>    
  15.     <!-- 设置数据库名 当url没有指定数据库时设置 -->  
  16. <!--    <property name="default_catalog">orcl</property>-->  
  17.     <property name="hibernate.show_sql">true</property>    
  18.     <property name="hibernate.format_sql">true</property>  
  19.   
  20.     <!-- 启用查询缓存 -->    
  21.     <property name="hibernate.cache.use_query_cache">false</property>    
  22.     
  23.         <mapping resource="com/bean/hbm/TestBean.hbm.xml" />  
  24.           
  25.     </session-factory>  

因为hibernate宣布不再支持DBCP,所以SSH中,连接池最好使用proxool。
内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值