博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C3P0 了解
阅读量:6006 次
发布时间:2019-06-20

本文共 2415 字,大约阅读时间需要 8 分钟。

hot3.png

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

 

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

 

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

1)hibernate官网推荐

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

 

下载:

 

这里说一下如何配置,网上其实有好多,我只是根据项目需要整理了一下,一共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中的数据源配置,如下:

参数说明:

(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),如下:

          
          
          
              
                  
                      ${hibernate.dialect}                                    
                      ${hibernate.show_sql}                                    
                      ${hibernate.use_sql_comments}                                                      
                      org.hibernate.connection.C3P0ConnectionProvider                                    
                  
                      5                                    
                  
                      50                                    
                  
                      120                                    
                  
                      100                                    
                  
                      120                                    
                  
                      2                                    
                   
                      true                                
                

 3)这里的dataSource可以是jndi。

 

三。dataSource(spring,开发常用)

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

    
oracle.jdbc.driver.OracleDriver
    
jdbc:oracle:thin:@localhost:1521:Test
    
Kay
    
root
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

 

参考资料:

参数说明:

Hibernate连接池配置:

Jndi 与 c3p0 结合:

C3P0容错和自动重连特性:

 

转载于:https://my.oschina.net/huangcongcong/blog/527766

你可能感兴趣的文章
从头学Java_01
查看>>
第一天上班
查看>>
Oracle-day03 中
查看>>
CocoaPods 配置使用 - IOS依赖管理
查看>>
反射操作公共成员变量
查看>>
用户配置文件和密码配置文件、用户组管理、用户管理、usermod命令
查看>>
SpringBoot2.X最佳实践《一》 之 SpringBoot2.x初体验
查看>>
nginx
查看>>
Spring Boot 异步调用方式@Async
查看>>
JavaScript如何实现大数的运算
查看>>
005-统一沟通-部署-基础-环境
查看>>
轻松绘制流程图攻略
查看>>
我的友情链接
查看>>
端口基础常识大全+常用端口对照
查看>>
kettle界面语言修改成中文后,重启报错
查看>>
nagios安装完后插件里没有check_mysql的解决方法
查看>>
谷歌Chrome开展实验,解决HTTPS混合内容错误
查看>>
全球.COM域名注册量统计:2月增超29万域名
查看>>
11月微博博客日均覆盖数TOP10:网易博客升至第七
查看>>
6月28日全球域名注册商(国际域名)保有量及市场份额
查看>>