zoukankan      html  css  js  c++  java
  • 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搞怕了 别着急 出错了的话

  • 相关阅读:
    地址栏中提交中文参数乱码问题
    拼接html字符串时单引号问题
    细线表格的制作
    盒子模型
    盒子间距离的计算规则:
    正则表达式
    轻便+智能:史上最酷恒温器Nest 2.0!
    医疗的未来,是身体控制大权的争夺战
    而立之年话沧桑
    刘晓明大使在《电讯报》的英文原文
  • 原文地址:https://www.cnblogs.com/ad-zhou/p/9109296.html
Copyright © 2011-2022 走看看