C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar
下载完成之后得到一个压缩包。
Tomcat6.x中配置JNDI数据源时默认使用的是Tomcat6.x自带的DBCP连接池,Tomcat6.x使用DBCP连接池配置JNDI数据源如下:
1
如果想让Tomcat6.x使用C3P0连接池配置JNDI数据源,在配置时,以下配置项需要修改
1、 type和factory的值发生变化
2、username=>user
3、url=>jdbcUrl
4、driverClassName=>driverClass
创建一个Web测试项目C3P0_JNDI_Config,解压压缩包,找到c3p0-0.9.5-pre9\lib目录下的相关Jar包如下图所示:
将C3P0的相关Jar包添加到项目中,在项目的META-INF目录下创建一个context.xml文件,目录结构如下图所示:
在tomcat服务器的lib目录下添加Oracle、MySQL、SQLServer三种数据库的驱动jar包,如下图所示:
1、在context.xml文件中加入如下配置信息
1 2 3 16 17 18 31 32 33 34 47
2.在web.xml引用JDNI数据源:
1 2 7 8 index.jsp 9 10 11 17 18 19 Oracle DB Connection 20 jdbc/OracleDataSource 21 javax.sql.DataSource 22 Container 23 24 25 26 27 MySQL DB Connection 28 jdbc/MysqlDataSource 29 javax.sql.DataSource 30 Container 31 32 33 34 35 SQLServer DB Connection 36 jdbc/SqlServerDataSource 37 javax.sql.DataSource 38 Container 39 40 41
3.部署C3P0_JNDI_Config Web应用到Tomcat服务器测试JNDI数据源
部署到tomcat服务器的webapps目录之后,tomcat服务器就会自动在\conf\Catalina\localhost目录下生成一个C3P0_JNDI_Config.xml文件,如下图所示:
C3P0_JNDI_Config.xml文件中的内容就是我们在META-INF目录的context.xml文件中配置的那些内容。
jsp测试页面如下:
1 2 3 4 5 DOCTYPE HTML> 6 7 8 C3P0配置JNDI数据源连接测试 9 10 11 12 针对MySQL数据库JNDI数据源测试 13 14 15 16 select * from ld_user 17 18 19 20 21 ${row.id}---${row.username}---${row.password} 22 23 24 针对Oracle数据库JNDI数据源测试 25 26 27 28 SELECT * FROM LEAD_OAMS_DBSOURCES 29 30 31 32 33 ${row.RESOURCEID}---${row.DBSOURCE_NAME}---${row.DBSOURCE_TYPE} 34 35 36 37
C3P0 自动重连相关参数 idleConnectionTestPeriod:C3P0会有一个Task检测pool内的连接是否正常,此参数就是Task运行的频率。默认值为0,表示不进行检测 acquireRetryAttempts:pool请求取新连接失败后重试的次数 C3P0目前存在问题: 当数据库重启后,C3P0不会自动重新初始化数据库连接池,当新的请求需要访问数据库的时候,此时回报错误(因为数据库重启,连接失效),同时刷新数据库连接池,丢弃掉已经失效的连接,当第二个请求到来时恢复正常。 C3P0目前没有提供当获取已建立连接失败后重试次数的参数,只有获取新连接失败后重试次数的参数(acquireRetryAttempts )。 要解决此问题,可以通过设置idleConnectionTestPeriod 参数折中解决,该参数的作用是设置系统自动检查连接池中连接是否正常的一个频率参数,时间单位是秒。