如何配置tomcat数据源以及Cannot create JDBC driver of class '' for connect URL 'null'
2016-03-16 14:46
1616 查看
最近折腾TOMCAT数据源的时候,遇到了一个错误:Cannot create JDBC driver of class '' for connect URL 'null'。
配置某个web项目私有的数据源,比如我的web项目名叫jndi:
1.将数据库驱动放到WEB-INF/lib下
2.在META-INF下建立context.xml
3.web.xml建立对数据源的引用
4.启动web项目可以通过下面的代码验证是否可以成功获取到数据源和数据库连接
配置项目私有的数据源这个比较简单,我自己在配置的时候也没有遇到问题。现在看下如何配置一个共有数据源,即webapp下的每个项目都可以访问的数据源。
1.将数据库驱动加入到%TOMCAT_HOME%/lib下
2.在%TOMCAT_HOME%/conf/server.xml中的<GlobalNamingResources>节点下增加配置:
启动tomcat,通过mysql的"SHOW processlist"可以看到,数据库连接是可以成功建立的。
3.既然已经配置了全局数据库连接,我们就可以删除jndi项目下的数据库驱动jar和context.xml,然后访问jsp发现:不能获取数据库连接。
折腾了很久,最终在这篇博客“在Tomcat配置JNDI数据源的三种方式”中找到了解决方案:还必需在jndi这个web项目下提供context.xml,内容配置如下:
值得一提的是:如果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>
配置某个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>
相关文章推荐
- tomcat优化小总结(window环境下)
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- Windows 10下安装Tomcat,文件目录共享访问
- Linux下tomcat使用
- 在MyEclipse中运行tomcat报错 严重: Error starting static Resources
- JBoss Web和 Tomcat的区别
- 查看TOMCAT内存使用情况(总结)
- 在tomcat下指定JDK路径
- 如何同时启动多个Tomcat服务
- MyEclipse 2015 运行tomcat 内存溢出的解决方法
- tomcat8目录结构
- (转)Tomcat内存设置详解
- tomcat 端口被占用
- tomcat manager the Cross Origin Resource Sharing
- 结合Apache和Tomcat实现集群和负载均衡
- 自动化测试:k8s环境下,通过检测文件是否存在来自动启停tomcatapp的方法_20160316_七侠镇莫尛貝
- Tomcat 启动GZIP 压缩
- tomcat监控重启脚本
- 在一台机子上启动两个TOMCAT
- tomcat 启动报 操作系统找不到已输入的环境选项