如何配置tomcat数据源以及Cannot create JDBC driver of class '' for connect URL 'null'

在配置TOMCAT数据源时遇到 Cannot create JDBC driver of class '' for connect URL 'null' 的错误。解决方法包括:将数据库驱动放入WEB-INF/lib,创建META-INF/context.xml,并在server.xml中配置全局数据源。但即使配置了全局数据源,仍需在web项目下提供context.xml以避免无法获取数据库连接的问题。

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

最近折腾TOMCAT数据源的时候,遇到了一个错误:Cannot create JDBC driver of class '' for connect URL 'null'。


配置某个web项目私有的数据源,比如我的web项目名叫jndi:

1.将数据库驱动放到WEB-INF/lib下


2.在META-INF下建立context.xml

<?xml version="1.0" encoding="UTF-8"?>  
<Context>  
	<Resource 
	name="jdbc/mysql"
	auth="Container" 
	type="javax.sql.DataSource"
	initialSize="5"
	maxActive="5" 
	maxIdle="5"
	username="root" 
	password="root"
	driverClassName="com.mysql.jdbc.Driver"
	url="jdbc:mysql://localhost:3306/test"
	factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"/>
	
</Context> 


3.web.xml建立对数据源的引用

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

	<resource-ref> 
        <description>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> 
	 
</web-app>

4.启动web项目可以通过下面的代码验证是否可以成功获取到数据源和数据库连接
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>

<%

Connection conn = null;

try
{
	Context ctx = new InitialContext(); 
	DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
	System.out.println(ds.getClass());   
	conn = ds.getConnection();
	System.out.println(conn.getClass());   
	System.out.println(conn.hashCode());   
	
} 
catch (Exception e)
{
	e.printStackTrace();
}
finally
{
	conn.close();
}

%>


配置项目私有的数据源这个比较简单,我自己在配置的时候也没有遇到问题。现在看下如何配置一个共有数据源,即webapp下的每个项目都可以访问的数据源。

1.将数据库驱动加入到%TOMCAT_HOME%/lib下



2.在%TOMCAT_HOME%/conf/server.xml中的<GlobalNamingResources>节点下增加配置:

<!--配置MySQL数据库的JNDI数据源-->
	<Resource 
		name="jdbc/mysql"
		auth="Container" 
		type="javax.sql.DataSource"
		initialSize="5"
		maxActive="5" 
		maxIdle="5"
		username="root" 
		password="root"
		driverClassName="com.mysql.jdbc.Driver"
		factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
		url="jdbc:mysql://localhost:3306/test"/>


启动tomcat,通过mysql的"SHOW processlist"可以看到,数据库连接是可以成功建立的。



3.既然已经配置了全局数据库连接,我们就可以删除jndi项目下的数据库驱动jar和context.xml,然后访问jsp发现:不能获取数据库连接。



折腾了很久,最终在这篇博客“在Tomcat配置JNDI数据源的三种方式”中找到了解决方案:还必需在jndi这个web项目下提供context.xml,内容配置如下:

<?xml version="1.0" encoding="UTF-8"?>  
<Context>  
	
	<ResourceLink name="jdbc/mysql" type="javax.sql.DataSource" global="jdbc/mysql"/>  

</Context>  


值得一提的是:如果context.xml配置如上所示,那么我们在web.xml中可以不用再配置如下数据源的引用:

<resource-ref> 
        <description>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> 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值