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

         昨天用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>
的话,就是有问题!!!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值