Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)
一、C3P0下载
C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar
下载完成之后得到一个压缩包
二、使用C3P0配置JNDI数据源
Tomcat6.x中配置JNDI数据源时默认使用的是Tomcat6.x自带的DBCP连接池,Tomcat6.x使用DBCP连接池配置JNDI数据源如下:

1 <Resource 2 name="oracleDataSource" 3 auth="Container" 4 type="javax.sql.DataSource" 5 maxActive="50" 6 maxIdle="10" 7 maxWait="10000" 8 username="lead_oams" 9 password="p" 10 driverClassName="oracle.jdbc.OracleDriver" 11 url="jdbc:oracle:thin:@192.168.1.229:1521:lead"/>

如果想让Tomcat6.x使用C3P0连接池配置JNDI数据源,在配置时,以下配置项需要修改
1、 type和factory的值发生变化
2、username=>user
3、url=>jdbcUrl
4、driverClassName=>driverClass
创建一个Web测试项目C3P0_JNDI_Config,解压
将C3P0的相关Jar包添加到项目中,在项目的META-INF目录下创建一个context.xml文件,目录结构如下图所示:
在tomcat服务器的lib目录下添加Oracle、MySQL、SQLServer三种数据库的驱动jar包,如下图所示:
1、在context.xml文件中加入如下配置信息

1 <Context> 2 <!-- 使用C3P0配置针对MySQL数据库的JNDI数据源 --> 3 <Resource 4 name="jdbc/MysqlDataSource" 5 auth="Container" 6 factory="org.apache.naming.factory.BeanFactory" 7 type="com.mchange.v2.c3p0.ComboPooledDataSource" 8 driverClass="com.mysql.jdbc.Driver" 9 idleConnectionTestPeriod="60" 10 maxPoolSize="50" 11 minPoolSize="2" 12 acquireIncrement="2" 13 user="root" 14 password="root" 15 jdbcUrl="jdbc:mysql://192.168.1.144:3306/leadtest"/> 16 17 <!-- 使用C3P0配置针对Oracle数据库的JNDI数据源 --> 18 <Resource 19 name="jdbc/OracleDataSource" 20 auth="Container" 21 factory="org.apache.naming.factory.BeanFactory" 22 type="com.mchange.v2.c3p0.ComboPooledDataSource" 23 driverClass="oracle.jdbc.OracleDriver" 24 idleConnectionTestPeriod="60" 25 maxPoolSize="50" 26 minPoolSize="2" 27 acquireIncrement="2" 28 jdbcUrl="jdbc:oracle:thin:@192.168.1.229:1521:lead" 29 user="lead_oams" 30 password="p"/> 31 32 33 <!--使用C3P0配置针对SQLServer数据库的JNDI数据源--> 34 <Resource 35 name="jdbc/SqlServerDataSource" 36 auth="Container" 37 factory="org.apache.naming.factory.BeanFactory" 38 type="com.mchange.v2.c3p0.ComboPooledDataSource" 39 driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver" 40 idleConnectionTestPeriod="60" 41 maxPoolSize="50" 42 minPoolSize="2" 43 acquireIncrement="2" 44 jdbcUrl="jdbc:sqlserver://192.168.1.51:1433;DatabaseName=demo" 45 user="sa" 46 password="p@ssw0rd"/> 47 </Context>

2.在web.xml引用JDNI数据源:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 <welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list> 10 11 <!-- 12 JNDI配置的资源引用: 13 • res-ref-name:表示引用资源的名称 14 • res-type:此资源对应的类型为javax.sql.DataSource 15 • res-auth:容器授权管理 16 --> 17 <!--Oracle数据库JNDI数据源引用 --> 18 <resource-ref> 19 <description>Oracle DB Connection</description> 20 <res-ref-name>jdbc/OracleDataSource</res-ref-name> 21 <res-type>javax.sql.DataSource</res-type> 22 <res-auth>Container</res-auth> 23 </resource-ref> 24 25 <!--MySQL数据库JNDI数据 --> 26 <resource-ref> 27 <description>MySQL DB Connection</description> 28 <res-ref-name>jdbc/MysqlDataSource</res-ref-name> 29 <res-type>javax.sql.DataSource</res-type> 30 <res-auth>Container</res-auth> 31 </resource-ref> 32 33 <!--SQLServer数据库JNDI数据源引用 --> 34 <resource-ref> 35 <description>SQLServer DB Connection</description> 36 <res-ref-name>jdbc/SqlServerDataSource</res-ref-name> 37 <res-type>javax.sql.DataSource</res-type> 38 <res-auth>Container</res-auth> 39 </resource-ref> 40 41 </web-app>

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 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%--引入JSTL标签库 --%> 3 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%> 5 <!DOCTYPE HTML> 6 <html> 7 <head> 8 <title>C3P0配置JNDI数据源连接测试</title> 9 </head> 10 11 <body> 12 <h3>针对MySQL数据库JNDI数据源测试</h3> 13 <%--使用sql:query标签发送SQL语句去数据库查询数据,查询的结果集保存到rs变量当中,dataSource属性指明使用的数据源--%> 14 <sql:query var="rs" dataSource="jdbc/MysqlDataSource"> 15 <%--MySQL JNDI数据源测试 SQL--%> 16 select * from ld_user 17 </sql:query> 18 <%--使用c:forEach标签遍历查询结果集rs中的每一行--%> 19 <c:forEach var="row" items="${rs.rows}"> 20 <%--${row.字段名}获取字段的值--%> 21 ${row.id}---${row.username}---${row.password}<br/> 22 </c:forEach> 23 <hr/> 24 <h3>针对Oracle数据库JNDI数据源测试</h3> 25 <%--使用sql:query标签发送SQL语句去数据库查询数据,查询的结果集保存到rs变量当中,dataSource属性指明使用的数据源--%> 26 <sql:query var="rs" dataSource="jdbc/OracleDataSource"> 27 <%--Oracle JNDI数据源测试 SQL--%> 28 SELECT * FROM LEAD_OAMS_DBSOURCES 29 </sql:query> 30 <%--使用c:forEach标签遍历查询结果集rs中的每一行--%> 31 <c:forEach var="row" items="${rs.rows}"> 32 <%--${row.字段名}获取字段的值--%> 33 ${row.RESOURCEID}---${row.DBSOURCE_NAME}---${row.DBSOURCE_TYPE}<br/> 34 </c:forEach> 35 <hr/> 36 </body> 37 </html>

C3P0 自动重连相关参数
idleConnectionTestPeriod:C3P0会有一个Task检测pool内的连接是否正常,此参数就是Task运行的频率。默认值为0,表示不进行检测
acquireRetryAttempts:pool请求取新连接失败后重试的次数
C3P0目前存在问题:
当数据库重启后,C3P0不会自动重新初始化数据库连接池,当新的请求需要访问数据库的时候,此时回报错误(因为数据库重启,连接失效),同时刷新数据库连接池,丢弃掉已经失效的连接,当第二个请求到来时恢复正常。
C3P0目前没有提供当获取已建立连接失败后重试次数的参数,只有获取新连接失败后重试次数的参数(acquireRetryAttempts )。
要解决此问题,可以通过设置idleConnectionTestPeriod 参数折中解决,该参数的作用是设置系统自动检查连接池中连接是否正常的一个频率参数,时间单位是秒。
Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)的更多相关文章
- JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar
- JNDI学习总结——Tomcat下使用C3P0配置JNDI数据源
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar
- JNDI学习总结(3)——Tomcat下使用C3P0配置JNDI数据源
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包. 二.使用C3P0配 ...
- Tomcat下使用c3p0配置jndi数据源
下载c3p0包: 下载地址:https://sourceforge.net/projects/c3p0/files/?source=navbar 解压后得到包:c3p0-0.9.2.jar,mchan ...
- JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...
- Tomcat下使用Druid配置JNDI数据源
com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...
- JNDI学习总结(4)——Tomcat下使用Druid配置JNDI数据源
com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...
- tomcat下配置jndi数据源c3p0
Tomcat下通过JNDI配置数据源,使用c3p0连接池 首先在打开tomcat找到在conf文件下,找到server.xml 在server.xml文件中找到标签 在下面添加如下配置 <Res ...
- Tomcat中配置JNDI数据源
准备工作: Tomcat版本:tomcat6.0以上 下例中均使用MySQL数据库 将对应数据源的jar包和MySQL的驱动包拷贝至tomcat的lib文件夹下 一.全局数据源 1步骤一:配置 在to ...
随机推荐
- BZOJ 2724: [Violet 6]蒲公英 [分块 区间众数]
传送门 题面太美不忍不放 分块分块 这种题的一个特点是只有查询,通常需要预处理:加入修改的话需要暴力重构预处理 预处理$f[i][j]$为第i块到第j块的众数,显然$f[i][j]=max{f[i][ ...
- 福建百度seo和推广,关键词排名优化,网络营销推广培训
福建百度seo和推广,关键词排名优化,网络营销推广培训 福建百度seo和推广,关键词排名优化,网络营销推广培训,那么如何才能够让自己的文章信息被百度收录呢?只要说自己的文章能够被百度收录,那么你的信息 ...
- 页面刷新方式实时检测cookie是否失效
在浏览器端每隔10秒钟刷新一次页面,可用于检查cookie值是否失效. 在study.php文件中存在这样一条语句: <meta http-equiv="refresh" c ...
- Vi/Vim的快捷方式
1 vi/ vim键盘图 2 文字解说 进入编辑模式的6种方式: i在光标前插入 I在行首插入 a在光标后插入 A在行末插入 o在下一行插入 O在上一行插入 删除字符 x 删除当前字符 X 删除前一个 ...
- 数据库之mac上mysql root密码忘记或权限错误的解决办法
[转自 http://blog.csdn.net/u014410695/article/details/50630233] 以下方法亲测有效,过程使用的工具只有mac的终端无需workbench 当 ...
- zabbix如何监控进程
zabbix中item的配置如下: zabbix中trigger的配置如下:
- 织梦使用if判断某个字段是否为空
织梦如何使用if判断某个字段是否为空呢?我们以文章页调用文章摘要为例: 使用if语句判断摘要是否为空,如果有摘要就显示摘要模块,如果没有就不显示 {dede:field.description run ...
- wampserve部署
全名 WampServer 来自法国的软件 http://www.wampserver.com/en/ 一.下载方法: 1.一级导航点击download(发现只不过是本页的跳转,硕大的 wampser ...
- lamp环境部署脚本
关于lamp环境的安装脚本,直接复制即可使用 注:apache2.2.X 版本和apache2.4.X版本 本人推荐兼容性版本安装 apache2.4.25 + apr1.5.2 + apr-util ...
- FFMpeg在Ubuntu上的安装和使用
在Ubuntu Server上编译FFmpeg FFmpeg是最流行的开源视频转码工具包,在Ubuntu上可以直接通过apt-get安装,但是默认的编码器不提供x264这些non-free的编码器,所 ...