一、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-0.9.5-pre9\lib目录下的相关Jar包如下图所示:

  

  将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 参数折中解决,该参数的作用是设置系统自动检查连接池中连接是否正常的一个频率参数,时间单位是秒。

JNDI学习总结(3)——Tomcat下使用C3P0配置JNDI数据源的更多相关文章

  1. JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar

  2. JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源

    com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...

  3. JNDI学习总结——Tomcat下使用C3P0配置JNDI数据源

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar

  4. Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包

  5. Tomcat下使用c3p0配置jndi数据源

    下载c3p0包: 下载地址:https://sourceforge.net/projects/c3p0/files/?source=navbar 解压后得到包:c3p0-0.9.2.jar,mchan ...

  6. JNDI学习总结(4)——Tomcat下使用Druid配置JNDI数据源

    com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...

  7. Tomcat下使用Druid配置JNDI数据源

    com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...

  8. JNDI在Spring和tomcat下的使用

    1. 是什么 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一.JNDI 在 J2EE 中的角色就是&q ...

  9. tomcat下context.xml中JNDI数据源配置

    jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...

随机推荐

  1. 关于zxing生成二维码,在微信长按识别不了问题

    在做校园学生到校情况签到系统时,我采用了zxing作为二维码生成工具.在测试的时候使用微信打开连接发现.我长按我的二维码之后,总是不会出现以下这种识别二维码的选项. 这就大大的降低了用户的体验,只能大 ...

  2. HDU-1023 Train Problem II 卡特兰数(结合高精度乘除)

    题目链接:https://cn.vjudge.net/problem/HDU-1023 题意 卡特兰数的应用之一 求一个长度为n的序列通过栈后的结果序列有几种 思路 一开始不知道什么是卡特兰数,猜测是 ...

  3. 13-Linux中进程与线程的概念以及区别

    linux进程与线程的区别,早已成为IT界经常讨论但热度不减的话题.无论你是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.对于一般的程序员,搞清楚二者的概念并在工作中学会运用是 ...

  4. 关于FAT32分区的U盘4GB文件的测试

    关于FAT32分区的U盘4GB文件的测试 很多人都知道FAT32的分区,单文件大小不能超过4GB,关于这个问题就来测测看. FAT32最大文件大小为2的32次方,也就是4294967296 Byte, ...

  5. Vuex-一个专为 Vue.js 应用程序开发的状态管理模式

    为什么会出现Vuex 非父子关系的组件如何进行通信?(Event Bus)bus.js import Vue from 'vue'; export default new Vue(); foo.vue ...

  6. [BJOI2018]求和(树链剖分)

    题目描述 master 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的 kkk 次方和,而且每次的 kkk 可能是不同的.此处节点深度的定义是这个节点到根 ...

  7. 从串口设置、读取、并分析um220模块的数据

    转载请注明:http://blog.csdn.net/wang_zheng_kai 导航制导与控制实验室 2014年11月10日 好久没有写博客了,先从一个小小的程序開始一段新的历程吧. 近期的项目主 ...

  8. poj--3281-- DiningI(最大流)

    Dining Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit Status ...

  9. ZOJ 2588 Burning Bridges(求桥的数量,邻接表)

    题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2588 Burning Bridges Time Limit: 5 ...

  10. 传说用户发来的请求是在JIoEndpoint的accept函数中接收的,是tomact与外界交互的分界点

    传说用户发来的请求是在JIoEndpoint的accept函数中接收的, 这是tomact与外界交互的分界点,所以来研究一下, >>>>>>>>> ...