tomcat下配置jndi数据源c3p0

Tomcat下通过JNDI配置数据源,使用c3p0连接池 首先在打开tomcat找到在conf文件下,找到server.xml 在server.xml文件中找到标签 在下面添加如下配置

<Resource  
            name="jdbc/mysql"  
            auth="Container"  
            factory="org.apache.naming.factory.BeanFactory"  
            type="com.mchange.v2.c3p0.ComboPooledDataSource"  
            driverClass="com.mysql.jdbc.Driver"  
            idleConnectionTestPeriod="60"  
            acquireRetryAttempts="3"  
            checkoutTimeout="10000"  
            maxPoolSize="50"  
            minPoolSize="2"  
            acquireIncrement="2"  
            user="root"  
            password="zhousong"  
            jdbcUrl="jdbc:mysql://localhost:3306/mysql1"/> 

需要注意的是在不同早期版本的tocmat中user,password,factory,driverClass等属性名称发生了改变,需要使用的时候需要注意

然后注意这些属性名称不能写错 我在web-inf目录下创建过context.xml文件 发现和网上很多博文的操作方法一致时 时常抛出错误

最常见的错误是 抛出driverclass is null这样的问题 然后让我找这个错误找了一个晚上 

他们都是在web-inf目录下创建context.xml文件 在web.xml中添加属性 最后调用 但是我自己尝试却一直报错 这个问题困扰我几天

最后通过在server.xml中修改数据源 在context.xml中修改添加路径连接 在web.xml文件中添加属性的方式,将这个问题解决了

然后再context.xml中添加如下

<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSource"/>

最后在web.xml中添加

<resource-ref>
      <description>MySQL DB Connection</description>
    <res-ref-name>jdbc/mysql</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

然后最后可以通过一个jsp或者一个servlet进行测试

package C3p0DemoTest;


import java.sql.Connection;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;



import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

public class C3p0Demo extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException{
        //C3p0在项目中的实现 Context.xml的存储路径在con文件的localhost里面 是对Context的整个配置
        //也是实现C3p0连接池的方法 
        try {
            //此类是执行命名操作的初始上下文。用于解析该 URL
             Context ctx = new InitialContext();
             
              DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
            
            
            
            System.out.println(ds.getConnection());
            
            System.out.println("ok");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException{
    }

}

然后效果如图

这里进行访问  主要Day18_4是我自己自学的项目名称 你需要改为自己的项目名称

C3p0Demo也需要和自己的项目的servlet相对于 具体路径 看你的servlet路径

 

 然后网上的一些资源 自己亲自动手试试就知道好坏 反正我被在meta-inf下配置context.xml搞怕了 别着急 出错了的话

 

posted @ 2018-05-30 10:12  coder-zhou  阅读(162)  评论(0编辑  收藏  举报