`
wangyanlong0107
  • 浏览: 486713 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源

 
阅读更多

http://blog.csdn.net/samjustin1/article/details/52265803

一、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目录下添加OracleMySQL、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数据源配置(tomcat)

    例如,使用 c3p0 数据源的配置: ```xml &lt;Resource name="jndiName" scope="Shareable" type="com.mchange.v2.c3p0.ComboPooledDataSource" factory="org.apache.naming.factory.BeanFactory" user="pual_...

    tomcat6+jndi+c3p0配置数据库连接池

    4. **在应用中引用JNDI数据源**:在Java代码中,你可以通过JNDI查找来获取数据源。例如,在Servlet或JSP中: ```java InitialContext ic = new InitialContext(); DataSource ds = (DataSource) ic.lookup("java:...

    Tomcat jndi 配置数据源过程

    总结,通过上述步骤,你已经在Tomcat中成功配置了一个JNDI数据源,使得应用程序可以通过全局名字方便地获取和释放数据库连接。这种配置方式提高了代码的可复用性和可维护性,同时利用连接池优化了数据库操作的性能。

    c3p0连接数据库及jndi链接例子

    总结一下,C3P0连接数据库涉及到创建数据源配置、设置数据库连接参数、获取和释放连接。而通过JNDI,我们可以将数据源注册到应用服务器,使得应用可以通过统一的名称查找和使用数据源,增强了系统的可移植性和可管理...

    tomcat数据源连接池配置

    在Java Web应用中,Tomcat作为一款广泛应用的Servlet容器,其数据源连接池配置是确保高效、稳定数据库访问的关键步骤。本篇文章将详细介绍如何在Tomcat中配置数据源连接池,以及涉及的相关jar包文件。 首先,理解...

    JNDI tomcat

    3. **JNDI的应用场景**:常见的应用场景包括数据库连接池管理(如Apache DBCP或C3P0)、EJB查找、邮件服务器配置等。 **二、JNDI在Tomcat中的使用** 1. **配置Tomcat的JNDI**:在Tomcat的`server.xml`配置文件中,...

    Tomcat统一配置C3P0连接池

    &lt;!-- 新的数据源 --&gt; &lt;bean id="dataSource2" class="org.springframework.jndi.JndiObjectFactoryBean"&gt; &lt;property name="jndiName"&gt; &lt;value&gt;java:comp/env/jdbc/commonDB &lt;/bean&gt;

    配置tomcat数据源

    7. **使用第三方数据源**:除了Tomcat自带的`org.apache.tomcat.jdbc.pool.DataSource`,还可以使用其他高性能的数据源,如HikariCP、C3P0、DBCP等。 【标签】"源码"和"工具"表明了这篇博客可能包含了具体的代码...

    JNDI数据源【步骤图解】

    总结,JNDI数据源是Java企业级应用中重要的数据库连接管理方式,通过JNDI服务,可以实现数据库连接的集中管理和动态配置,提高应用的可维护性和安全性。理解并正确配置JNDI数据源是开发高效、稳定的Java EE应用的...

    C3p0配置连接池及jar

    总结,C3p0是一个强大的数据库连接池实现,它的配置主要包括添加jar依赖、设置数据源参数以及在代码中使用数据源。通过合理配置,C3p0能够有效地管理数据库连接,提高系统效率,并降低资源消耗。在实际开发中,我们...

    JAVA数据库连接池(C3P0,Druid,JNDI ,DBCP,Proxool,BoneCP)

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。其特点包括自动测试连接、空闲连接检测以及多线程并发控制等。C3P0通过配置参数可以调整连接池的大小、超时时间、空闲...

    tomcat配置数据源步骤

    - 对于更复杂的配置,如C3P0或HikariCP等第三方连接池,需要在Tomcat的`conf/context.xml`中配置`&lt;Resource&gt;`标签,并在Web应用的`WEB-INF/web.xml`中声明数据源。第三方连接池提供了更多的性能调优选项,如最小...

    Tomcat配置数据源

    同时,为了提高性能和安全性,建议使用连接池管理工具如C3P0或HikariCP,它们能更有效地管理数据库连接,避免资源浪费。 此外,对于其他类型的数据源,比如Oracle、PostgreSQL等,配置过程类似,主要区别在于驱动...

    基于DBCP/c3p0/Tomcat的数据库连接池的demo

    本示例将详细介绍如何使用DBCP(Database Connection Pool)、c3p0以及Tomcat内置的数据源来实现数据库连接池的配置与使用。 **DBCP(Database Connection Pool)** DBCP是Apache软件基金会的Jakarta项目下的一个子...

    tomcat配置db2数据源jar包

    7. **安全性和优化**:为提高安全性,建议使用连接池如C3P0或HikariCP,并避免在配置文件中明文写入数据库密码。同时,根据实际应用负载调整连接池参数,如最小连接数、最大连接数等。 通过以上步骤,你可以在...

    spring 配置jndi

    - 在Java应用服务器(如Tomcat、JBoss、WebLogic等)中,你需要先配置一个JNDI数据源。这通常在服务器的管理控制台或者配置文件(如Tomcat的`context.xml`)中完成。例如,在Tomcat中,可以在`server.xml`或`...

    tomcat jndi ssl

    1. "tomcat7.0配置JNDI数据源的几种方式.docx" - 这个文档可能详细介绍了在Tomcat 7.0中设置JNDI数据源的不同方法,包括XML配置、Context元素的使用、以及可能的第三方库(如Apache DBCP或C3P0)集成。 2. "tomcat...

    Tomcat配置数据源连接池示例

    Tomcat作为一个流行的Java Servlet容器,支持多种数据源连接池实现,如Apache Commons DBCP、C3P0、HikariCP等。在这个示例中,我们将以一个常见且高效的连接池——HikariCP为例进行讲解。 首先,我们需要理解数据...

    c3p0连接池

    - **JNDI配置**:在Tomcat的`context.xml`中定义数据源,将c3p0数据源与JNDI绑定,方便多应用共享。 - **Hibernate配置**:在Hibernate的配置文件`hibernate.cfg.xml`中添加c3p0的相关配置,指定数据源类型为c3p0...

    web学习笔记 —— 数据源

    3. **配置数据源**:在Web应用服务器如Tomcat、Jetty或JBoss中,数据源的配置通常在服务器的配置文件中完成,如Tomcat的`context.xml`或`server.xml`。配置项包括数据库驱动类、URL、用户名、密码等。在Spring框架中...

Global site tag (gtag.js) - Google Analytics