昨天用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'
异常,所以在网上找了好多
有效的一中解决方案是
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>
的话,就是有问题!!!!!!!!
Tomcat 数据源配置实战
本文分享了在 Tomcat 中配置 MySQL 数据源的过程与遇到的问题,包括使用 XML 配置文件进行连接池设置的方法,以及解决连接异常的具体步骤。
3544

被折叠的 条评论
为什么被折叠?



