tomcat 下数据库连接池的实现与问题

本文分享了在 Tomcat 中配置 MySQL 数据源的过程与遇到的问题,包括使用 XML 配置文件进行连接池设置的方法,以及解决连接异常的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         昨天用XML实现了个小留言本的功能 ,今天想换成数据库的,因为用了接口,所以中间还是比较容易转换的

但是,当在tomcat里实现数据库连接池的时候就是错误不断,先看看代码

TOMCAT_HOME/conf/Catalina/localhost/webtest.xml

 

<?xml version="1.0" encoding="utf-8"?>
<Context docBase="D:ApacheTomcatwebappswebtest" path="/webtest">
   
        
<!-- dbPool begin -->
 
    
<Resource name="jdbc/webtest" auth="Container" type="javax.sql.DataSource"/>
       
<ResourceParams name="jdbc/webtest">
   
           
<parameter>                                    
             
<name>factory</name> 
              
<value> org.apache.commons.dbcp.BasicDataSourceFactory</value>    
          
</parameter>
   
      
      
<parameter>
        
<name>username</name>
        
<value>root</value> 
      
</parameter>
   
      
<parameter>
        
<name>password</name>
        
<value>123456</value>
      
</parameter>
   
   
      
<parameter> 
        
<name>url</name>       
         
<value>jdbc:mysql://localhost:3306/webtest</value>
      
</parameter>
   
       
<parameter> 
             
<name>maxActive</name>
             
<value>20</value>
      
</parameter>
   
       
<parameter>
             
<name>maxIdle</name>
             
<value>10</value> 
      
</parameter>
   
      
<parameter>
           
<name>maxWait</name>
           
<value>30</value>
      
</parameter>
   
      
<parameter>
        
<name>driverClassName</name> 
          
<value>com.mysql.jdbc.Driver</value>
      
</parameter>
   
    
</ResourceParams>
      
<!-- dbPool end -->
</Context>

 

 web.xml部分

 

<!--DB pool for tomcat begin-->
    
<resource-ref>
        
<res-ref-name>jdbc/webtest</res-ref-name>
        
<res-type>javax.sql.DataSource</res-type>
        
<res-auth>Container</res-auth>
    
</resource-ref>
    
<!--DB pool end-->

 

程序里的

 

package cn.edu.ctgu.bean;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class DBConnectionManager {
//    private static DBConnectionManager manager = null;
    private static Log logger = LogFactory.getLog(DBConnectionManager.class);
    
private static DataSource ds = null;
    
static {
        
try{
            Context context 
= new InitialContext();
            
if(context==null&&logger.isInfoEnabled()){
                logger.info(
"在DBConnectionManager里创建Context失败");
            }

            context 
=(Context) context.lookup("java:comp/env");
            ds 
= (DataSource) context.lookup("jdbc/webtest");
        }
catch(NamingException ne){
            ne.printStackTrace();
        }

    }

    
    
public static Connection getConnection(){
        Connection conn 
= null;
        
try {
            conn 
= ds.getConnection();
        }
 catch (SQLException e) {
            
// TODO 自动生成 catch 块
            if(logger.isDebugEnabled()){
                logger.debug(e.getMessage());
            }

            e.printStackTrace();
        }

        
return conn;
    }

    

}

但是当开启tomcat的时候老是有

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

异常,所以在网上找了好多

有效的一中解决方案是

在TOMCAT5.5.X的版本中配置数据源会出现这样的错误
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'


在Server.xml中设置如下
<Resource name="jdbc/cardsystem" type="javax.sql.DataSource" password="123456" driverClassName="com.mysql.jdbc.Driver" maxIdle="2" maxWait="5000" username="root" url="jdbc:mysql://localhost:3306/CardSystemDemo?autoReconnect=true&useUnicode=true&characterEncoding=GB2312" maxActive="100"/>

然后在WebApp的Context.xml中加入
<ResourceLink name="jdbc/cardsystem" global="jdbc/cardsystem" type="j
avax.sql.DataSource"/>
就一点问题都没有

还有,如果不配置server.xml的话
直接在Context.xml中加入
<Resource name="jdbc/cardsystem" type="javax.sql.DataSource" password="123456" driverClassName="com.mysql.jdbc.Driver" maxIdle="2" maxWait="5000" username="root" url="jdbc:mysql://localhost:3306/CardSystemDemo?autoReconnect=true&useUnicode=true&characterEncoding=GB2312" maxActive="100"/>
也是可以正常的运行

 

但是如果Context.xml中的是
<Resource auth="Container"
name="jdbc/cardsystem"
global="jdbc/cardsystem"
scope="Shareable"
type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/cardsystem">

<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/CardSystemDemo?autoReconnect=true&useUnicode=true&characterEncoding=GB2312</value>
</parameter>

<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>

<parameter>
<name>username</name>
<value>root</value>
</parameter>

<parameter>
<name>password</name>
<value>123456</value>
</parameter>

<parameter>
<name>maxWait</name>
<value>3000</value>
</parameter>

<parameter>
<name>maxIdle</name>
<value>100</value>
</parameter>

<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
</ResourceParams>
的话,就是有问题!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值