关于Tomcat与MySQL连接池问题的详解

转载自   关于Tomcat与MySQL连接池问题的详解

研究了一天,终于有所收获,希望对大家有所帮助。首先请大家注意:这里尤其讨论Tomcat5.5版本中遇到的问题,为什么尤其单对这个版本,我一会儿便加以说明。

  问题一:Cannot create JDBC driver of class '' for connect URL 'null'
  答:
  [原因分析]
  很多朋友在配置好$Tomcat/conf/server.xml、$Tomcat/conf/context.xml、甚至WEB-INF/web.xml后发现调用连接池便会出现以上错误。分析错误原因,一般是因为大家没有邦定数据源(实际错误原因是因为driverClassName、url的设置为空,但大家肯定不会忘记设置这个地方,所以肯定是大家设置完了没有进行连接!)。通常大家配置数据源有两种方式(在$Tomcat/conf/context.xml的设置方法就不单算了),一种是在$Tomcat/conf/server.xml的</GlobalNamingResources>前添加如下代码:
  设置方法一:
   <Resource
      name="jdbc/test"   //数据源名称
      type="javax.sql.DataSource"
      driverClassName="com.mysql.jdbc.Driver" //这就是我刚才提到的driverClassName的设置
      passWord="admin"   //数据库密码
      maxIdle="2"
      maxWait="5000"
      username="root"   //数据库用户名
      url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //数据库URL,就是刚才提到的url
      maxActive="4"/>

  除了有注释的地方外,都是设置连接数目、闲置状况和活动状况的参数,如果你仅是做学习试验,可以不必更改。这种方法配制后的效果等同于在Tomcat图形界面中配置操作。
  另一种发法是在$Tomcat/conf/server.xml的<Context ...></Context>中加入如下代码:
  设置方法二:
    <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/>
       <ResourceParams name="jdbc/test">
       <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>admin</value>
       </parameter>
       <parameter>
         <name>driverClassName</name>
         <value>com.mysql.jdbc.Driver</value>
       </parameter>
       <parameter>
         <name>url</name>
         <value>jdbc:mysql://localhost:3306/test?autoReconnect=true</value>
       </parameter>
       <parameter>
         <name>initialSize</name>
         <value>20</value>
       </parameter>
       <parameter>
         <name>maxActive</name>
         <value>30</value>
       </parameter>
       <parameter>
         <name>maxWait</name>
         <value>10000</value>
       </parameter>
    </ResourceParams>

  这样设置的通常目的是想让数据源在一个单独的映射目录中实现,也就是通常这段代码出现在<Context docBase="具体目录(如D:\webapps\myjsp)" path="访问名称(如/myjsp)" reloadable="true"></Context>,这样就可以通过访问http://localhost:8080/myjsp/XXX.jsp来访问D:\webapps\myjsp中的某个jsp页面进而调取数据源或进行其它操作调取数据源。

  问题是,无论哪种方法,大家都没有进行连接!如果不进行ResourceLink,也免或者bean等无法找到你设置的代码,又怎么找到driverClassName和url呢?实际上任何一个参数设置都不会被找到的!

  [解决方法]
  知道了原因,解决也就方便了。无论你是使用哪种方法。
  解决方法一:
  如果想在某个映射目录内实现ResourceLink,就在<Context ...></Context>中间添加<ResourceLink global="数据源名称" name="映射后的名称" type="javax.sql.DataSource"/>,注意如果你不了解代码关联关系,一定紧紧贴在<Context ...>后写就好。
  解决方法二:
  如果想变成全局性的,在所有映射目录中均可以使用,就干脆写在$Tomcat/conf/context.xml中,万事OK了。
  一般大家把“数据源名称”和“映射后的名称”设置成同一个,例如我是这样设置的<ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>。

  另外必须说明,在Tomcat5.5中,如果你像上面第二种设置方法,即使加上ResourceLink,也会遇到不能正常运行的问题。

  问题二:javax.naming.NameNotFoundException: Name XXX is not bound in this Context 
  答:
  [原因分析]
  Tomcat5.5中,在<Context ...><Context>中设置数据源不能正常运行,我看过一位外国人写的帖子,我英语水平不高,不过刚好能看懂。他说这是因为比较高的版本中(应该是说Tomcat和dbcp),factory的值由org.apache.commons.dbcp.BasicDataSourceFactory改为了org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory。但是我进行过尝试,并不能解决问题。而且我发现Tomcat5.5标准版本自带dbcp,就在$Tomcat\common\lib中。我看过另一个网友的解说,他说用第二种设置方法是不行的。这说明第二种设置方法只适用以前版本,现在的版本我不知道要在哪部分做更改,但错误原因是想一起那么设置,服务器找不到“数据源名称”对应的数据源。
  [解决方法]
  知道原因就可以解决了,看来只有把数据源声明在<GlobalNamingResources>中才能起作用。所以大家就按照第一种设置方法设置Tomcat5.5(这就是我为什么尤其讲Tomcat5.5)就可以了。

  问题三:Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
  答:
  [原因分析]
  不光对于mysql,对于别的数据库,只要找不到,就会抛出这个错误"Cannot load JDBC driver class",那么为什么会找不到数据库驱动类呢?如何才能找到呢?其实很简单。
  [解决方法]
  只要把jdbc拷贝到$Tomcat\common\lib中就可以了。

  问题四:Cannot get a connection, pool exhausted
  [原因分析]
  很简单,不能建立连接,连接池溢出,这说明你的连接资源都浪费了,原因是你没有及时回收它们。
  [解决方法]
  及时并正确使用close()方法释放ResultSet、Statement、Connection,具体语句我就不说了,推荐在finally中写。

  总结:所以,如果你想用Tomcat5.5建立一个数据源连接池,只要三步。

  第一:设置数据源,推荐用图形操作界面,如果手动就在$Tomcat/conf/server.xml中</GlobalNamingResources>前添加如下代码:

   <Resource
      name="jdbc/test"   //数据源名称
      type="javax.sql.DataSource"
      driverClassName="com.mysql.jdbc.Driver" //这就是我刚才提到的driverClassName的设置
      password="admin"   //数据库密码
      maxIdle="2"
      maxWait="5000"
      username="root"   //数据库用户名
      url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //数据库URL,就是刚才提到的url
      maxActive="4"/>

  注释参数记得更改成自己的。

  第二:设置Resource连接。推荐在$Tomcat/conf/context.xml中写入<ResourceLink global="数据源名称" name="映射后的名称" type="javax.sql.DataSource"/>,如果想就在某个单独映射目录实现,就在$Tomcat/conf/server.xml中需要映射的目录中的<Context ...>后写入。

  第三:将JDBC拷贝到$Tomcat\common\lib中

  另外,我在这里不详细说明如何调用数据源,这个问题比较简单,但要注意,DataSource ds=(DataSource)envCtx.lookup("引用数据源");语句中"引用数据源"只的是"映射后的名称",不是"数据源名称",所以我建议大家方便起见把两个名字设成同一个。而且特别要注意及时释放闲置资源,不然连接池就会溢出!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析

ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析。 本篇将介绍实现ASP.NET Core SOAP服务端解析&#xff0c;而不是ASP.NET Core整个WCF host。 因为WCF中不仅仅只是有SOAP&#xff0c; 它还包含很多如消息安全性&#xff0c;生成WSDL&#xff0c;双工信道&#xff0c;非…

java异常了还会往下走吗_异常一个问题,请帮下忙:处理异常后,程序会继续往下运行吗...

import java.util.*;public class PrintBig{public static void main(String[] args){Scanner in new Scanner(System.in);int sum;int count0;System.out.println("输入10个整数");for(int i0;i<10;i){sum in.nextInt();try{Integer k new Integer(sum);}catc…

新闻发布项目——访问温馨提示

1.本项目开发的软件&#xff1a;MyEclipse10.0tomcat7.0sql servel2012 2.本项目所有的CSS下载地址&#xff1a;Jsp实现新闻发布系统的CSS界面 3.本项目所有的JS下载地址&#xff1a;Jsp实现新闻发布系统的JS界面 4.本项目所有的图片下载地址&#xff1a;Jsp实现新闻发布系统的…

Tomcat 使用apr优化

转载自 Tomcat 使用apr优化最近业务服务器出现了一些问题&#xff0c;Nginx傲娇了&#xff0c;准备把加Nginx插件上的一些处理逻辑扔到后端的Tomcat的业务处理里面去&#xff0c;考虑到tomcat目前本来就压力山大&#xff0c;所以弄了弄apr库来优化tomcat的并发能力。&#xf…

ASP.NET Core MVC 配置全局路由前缀

前言 大家好&#xff0c;今天给大家介绍一个 ASP.NET Core MVC 的一个新特性&#xff0c;给全局路由添加统一前缀。严格说其实不算是新特性&#xff0c;不过是Core MVC特有的。 应用背景 不知道大家在做 Web Api 应用程序的时候&#xff0c;有没有遇到过这种场景&#xff0c;就…

java jpa saveall方法优化_JPA批量插入(saveAll)

有时候要从第三方导入数据&#xff0c;一般量都比较大&#xff0c;除了方法用异步线程Async之外&#xff0c;如果每条记录都调用一次save显然对数据库压力很大。可以使用JPA的批量保存方法saveAll(Iterable entities)。由于JPA的批量保存和批量修改是同一个方法&#xff0c;所以…

js截取字符串的后几位数 省份证号*隐藏

js截取字符串的后几位数 代码如下&#xff1a; var str"abcdefghhhh";//截取后4位 str.substring(str.length-4)&#xff1b; js * 代替 var str ’331023187609300311‘&#xff1b; //18位省份证号 前三位显示中间10位有8个*代替后5位显示 331********00…

java 单一职责原则_设计模式之单一职责原则

对类来说&#xff0c;即一个类应用只负责一项职责&#xff0c;如类A负责两个不同的职责&#xff1a;职责1&#xff0c;职责2.当职责1需求变更时&#xff0c;可造成职责2执行错误&#xff0c;所以需要将类A的粒度分解为A1&#xff0c;A2.降低类的复杂度&#xff0c;一个类只负责…

TypeScript 2.0 正式发布

9 月 22 日&#xff0c;TypeScript 2.0 正式发布了。 TypeScript 是微软开发的开源的编程语言&#xff0c;主要负责人是 C# 之父 Anders Hejlsberg。 TypeScript 成功将 JavaScript 的潜能与静态类型结合了起来&#xff0c;而且编译为 JavaScript。编译时类型检查可以避免很多潜…

Tomcat server.xml配置示例

转载自 Tomcat server.xml配置示例几乎所有容器类型的应用都会包含一个名为 server.xml 的文件结构。基本上&#xff0c;其中的每个元数据或者配置都是容器完成初始化所需要的。正是由于这些内容都是可配置的&#xff0c;使得软件设计者或架构师可以在容器运行时或销毁时&am…

日志-周报-月报(2019年2月)

20190203 1.马氏距离找公式 2.ruby先不看吧&#xff0c;先java学着到联通没办法在写ruby 3.舔狗&#xff0c;ppt&#xff0c;进公司考智商&#xff0c;升职靠情商。 4.看德哥看了一天 5.没了 6.联通调岗做销售&#xff0c;华为不续签合同&#xff0c;ppt文化哪家都一样&a…

怎么用php配合js编写动态页面_JavaScript_JavaScript教程:用JS脚本实现Web页面信息交互范例,要实现动态交互,必须掌握有 - phpStudy...

要实现动态交互&#xff0c;必须掌握有关窗体对象(Form)和框架对象(Frames)更为复杂的知识。三、范例下面我们演示通过点击一个按钮(red)来改变窗口颜色&#xff0c;点击“调用动态按钮文档”调用一个动态按钮文档。test8_1.htm//原来的颜色document.bgColor"blue";d…

SignalR的性能监测与服务器的负载测试

前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的负载测试 我们开发任何一个应用,他的性能监测是很重要的参考数据,关系着我们后期优化,更新,改动..等等... SignalR作为…

在Tomcat配置JNDI数据源的三种方式

转载自 在Tomcat配置JNDI数据源的三种方式在我过去工作的过程中,开发用服务器一般都是Tomcat&#xff0c;数据源的配置往往都是在applicationContext.xml中配置一个dataSource的bean&#xff0c;然后在部署时再修改JNDI配置。我猜是因为Tomcat的配置需要改配置文件&#xff0…

毕业设计word 表格标题 图表标题

图一模一样 生成目录 ************************************************************************************************************************* 生成表目录和图目录 *********************************************************************************************…

php打印 二维数组,PHP中遍历二维数组_以不同形式的输出操作实例

//定义二维索引数组$arr array(array("101","李军","男","1976-02-20","95033"),array("103","陆君","男","1974-06-03","95031"),array("105","匡明&q…

Ubuntu 16.04下ASP.NET Core+ MySql + Dapper在 Jexus、nginx 下的简单测试

一、环境及工具 1、服务器 VirtualBox5.1.4 安装 Ubuntu Server 16.04 amd64MySql Ver 14.14 Distrib 5.6.21Jexus 5.8.1nginx 1.10.0dotnet core 1.0.0-preview2-003121supervisor 3.2.1 2、开发环境 VS2015 Update 3DotNetCore.1.0.0-VS2015Tools.Preview2.0.1.exe 3、测试工…

jsp九大隐藏对象

转载自 jsp九大隐藏对象&#xfeff;&#xfeff;jsp内置对象&#xff08;隐藏对象&#xff09;&#xff1a;不加声明和创建就可以在jsp页面脚本中使用的成员对象。 内置对象类型作用域requestjavax.servlet.http.HttpServletRequestrequestresponsejavax.servlet.http.HttpS…

新闻发布项目——数据库脚本(直接导入即可)

数据库sql servel 2012版本&#xff0c;以下是脚本&#xff1a; USE [master] GO /****** Object: Database [newsDB] Script Date: 2016/11/24 19:48:46 ******/ CREATE DATABASE [newsDB]CONTAINMENT NONEON PRIMARY ( NAME NnewsDB, FILENAME NE:\第二期\第六本书使…