C3P0三种连接池配置

2024-05-03 05:38
文章标签 配置 三种 连接池 c3p0

本文主要是介绍C3P0三种连接池配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C3P0: 一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

 

默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池。但这个连接池性能不佳,因此官方也只是建议仅在开发环境下使用。Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool。

 

这里说一下为什么一定要使用C3P0吧:

1)hibernate官网推荐

2)  解决数据库重启后tomcat在不需要重启的情况下即可重新获得数据连接的问题。

 

下载:http://www.mchange.com/projects/c3p0/index.html

 

这里说一下如何配置,网上其实有好多,我只是根据项目需要整理了一下,一共3种,大家根据需要来配置。

 

一。JNDI(项目比较常用,最简单,与代码无关联)

1)在tomcat或者项目中引入最新版的C3P0的JAR包(我是用的是c3p0-0.9.2.1.jar)

如果启动时报类没有找到:Caused by: java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector,

则需要加入mchange-commons-java-0.2.3.4.jar。

2)修改tomcat中的数据源配置,如下:

Xml代码   收藏代码
  1. <Resource name="jdbc/dbsource"     
  2.             type="com.mchange.v2.c3p0.ComboPooledDataSource"    
  3.             maxPoolSize="50" minPoolSize="5" acquireIncrement="2"  initialPoolSize="10"  maxIdleTime="60"  
  4.             factory="org.apache.naming.factory.BeanFactory"    
  5.             user="xxxx" password="xxxx"    
  6.             driverClass="oracle.jdbc.driver.OracleDriver"    
  7.             jdbcUrl="jdbc:oracle:thin:@192.168.x.x:1521:orcl"   
  8.             idleConnectionTestPeriod="10" />   

参数说明:

(1)idleConnectionTestPeriod

当数据库重启后或者由于某种原因进程被杀掉后,C3P0不会自动重新初始化数据库连接池,当新的请求需要访问数据库的时候,此时会报错误(因为连接失效),同时刷新数据库连接池,丢弃掉已经失效的连接,当第二个请求到来时恢复正常。

C3P0目前没有提供当获取已建立连接失败后重试次数的参数,只有获取新连接失败后重试次数的参数(acquireRetryAttempts【默认为30】 )。

要解决此问题,可以通过设置idleConnectionTestPeriod【默认为0,表示不检查 】参数折中解决,该参数的作用是设置系统自动检查连接池中连接是否正常的一个频率参数,时间单位是秒 。

 

(2)acquireIncrement

当连接池中的的连接耗尽的时候c3p0一次同时获取的连接数,也就是说,如果使用的连接数已经达到了maxPoolSize,c3p0会立即建立新的连接。

 

(3)maxIdleTime

另外,C3P0默认不会close掉不用的连接池,而是将其回收到可用连接池中,这样会导致,连接数越来越大,所以需要设置maxIdleTime【默认0,表示永远不过期】,单位是秒,maxIdleTime表示idle状态的connection能存活的最大时间。

 

3)项目中正常引入这个数据源即可,代码不需要任何修改

 

 

二。Hibernate(spring+hibernate):不推荐,完全可以使用第一种和第三种方法代替。

1)项目中引入C3P0的JAR

2)修改Hibernate中的配置(我使用的是Spring+Hibernate),如下:

Xml代码   收藏代码
  1. <bean id="sessionFactory"  
  2.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  3.         <property name="dataSource" ref="dataSource"/>  
  4.         <property name="mappingLocations" value="${hibernate.mapping.locations}" />  
  5.         <property name="hibernateProperties">  
  6.             <props>  
  7.                 <prop key="hibernate.dialect">  
  8.                     ${hibernate.dialect}  
  9.                 </prop>  
  10.                 <prop key="hibernate.show_sql">  
  11.                     ${hibernate.show_sql}  
  12.                 </prop>  
  13.                 <prop key="hibernate.use_sql_comments">  
  14.                     ${hibernate.use_sql_comments}  
  15.                 </prop>  
  16.                   
  17.                 <prop key="hibernate.connection.provider_class">  
  18.                     org.hibernate.connection.C3P0ConnectionProvider  
  19.                 </prop>  
  20.                 <!--连接池的最小连接数 -->  
  21.                 <prop key="hibernate.c3p0.min_size">  
  22.                     5  
  23.                 </prop>  
  24.                 <!--最大连接数 -->  
  25.                 <prop key="hibernate.c3p0.max_size">  
  26.                     50  
  27.                 </prop>  
  28.                 <!--连接超时时间 -->  
  29.                 <prop key="hibernate.c3p0.timeout">  
  30.                     120  
  31.                 </prop>  
  32.                 <!--statemnets缓存大小 -->  
  33.                 <prop key="hibernate.c3p0.max_statements">  
  34.                     100  
  35.                 </prop>  
  36.                 <!--每隔多少秒检测连接是否可正常使用 -->  
  37.                 <prop key="hibernate.c3p0.idle_test_period">  
  38.                     120  
  39.                 </prop>  
  40.                 <!--当池中的连接耗尽的时候,一次性增加的连接数量,默认为3 -->  
  41.                 <prop key="hibernate.c3p0.acquire_increment">  
  42.                     2  
  43.                 </prop>  
  44.                 <!-- 每次都验证连接是否可用 -->   
  45.                 <prop key="hibernate.c3p0.validate">  
  46.                     true  
  47.                 </prop>  
  48.             </props>  
  49.         </property>  
  50.     </bean>  
  51.       

 3)这里的dataSource可以是jndi。

 

三。dataSource(spring,开发常用)

如果使用spring,同时项目中不使用jndi,又不想配置到Hibernate中,可以直接将C3P0配置到dataSource中即可,如下:

Xml代码   收藏代码
  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  2.   <property name="driverClass"><value>oracle.jdbc.driver.OracleDriver</value></property>  
  3.   <property name="jdbcUrl"><value>jdbc:oracle:thin:@localhost:1521:Test</value></property>  
  4.   <property name="user"><value>Kay</value></property>  
  5.   <property name="password"><value>root</value></property>  
  6.   <!--连接池中保留的最小连接数。-->  
  7.   <property name="minPoolSize" value="10" />  
  8.   <!--连接池中保留的最大连接数。Default: 15 -->  
  9.   <property name="maxPoolSize" value="100" />  
  10.   <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->  
  11.   <property name="maxIdleTime" value="1800" />  
  12.   <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->  
  13.   <property name="acquireIncrement" value="3" />  
  14.   <property name="maxStatements" value="1000" />  
  15.   <property name="initialPoolSize" value="10" />  
  16.   <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->  
  17.   <property name="idleConnectionTestPeriod" value="60" />  
  18.   <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->  
  19.   <property name="acquireRetryAttempts" value="30" />  
  20.   <property name="breakAfterAcquireFailure" value="true" />  
  21.   <property name="testConnectionOnCheckout" value="false" />  
  22.   </bean>  

 

 

 

参考资料:

参数说明:http://baike.baidu.com/view/920062.htm

Hibernate连接池配置:http://dengjianqiang200.blog.163.com/blog/static/658119201032313017139

Jndi 与 c3p0 结合:http://yakar.iteye.com/blog/356243

C3P0容错和自动重连特性:http://hi.baidu.com/ivexrhlaozbdqtq/item/ad9572973a5312f2291647b1

这篇关于C3P0三种连接池配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955939

相关文章

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、