推介做resume的网站,网页制作及网站建设,惠州市做网站,wordpress远程保存图片转载自 关于Tomcat与MySQL连接池问题的详解研究了一天#xff0c;终于有所收获#xff0c;希望对大家有所帮助。首先请大家注意#xff1a;这里尤其讨论Tomcat5.5版本中遇到的问题#xff0c;为什么尤其单对这个版本#xff0c;我一会儿便加以说明。问题一#xff1a;C…转载自 关于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 namejdbc/test //数据源名称 typejavax.sql.DataSource driverClassNamecom.mysql.jdbc.Driver //这就是我刚才提到的driverClassName的设置 passWordadmin //数据库密码 maxIdle2 maxWait5000 usernameroot //数据库用户名 urljdbc:mysql://localhost:3306/test?autoReconnecttrue //数据库URL就是刚才提到的url maxActive4/除了有注释的地方外都是设置连接数目、闲置状况和活动状况的参数如果你仅是做学习试验可以不必更改。这种方法配制后的效果等同于在Tomcat图形界面中配置操作。 另一种发法是在$Tomcat/conf/server.xml的Context .../Context中加入如下代码 设置方法二 Resource namejdbc/test authContainer typejavax.sql.DataSource/ ResourceParams namejdbc/test parameter namefactory/name valueorg.apache.commons.dbcp.BasicDataSourceFactory/value /parameter parameter nameusername/name valueroot/value /parameter parameter namepassword/name valueadmin/value /parameter parameter namedriverClassName/name valuecom.mysql.jdbc.Driver/value /parameter parameter nameurl/name valuejdbc:mysql://localhost:3306/test?autoReconnecttrue/value /parameter parameter nameinitialSize/name value20/value /parameter parameter namemaxActive/name value30/value /parameter parameter namemaxWait/name value10000/value /parameter /ResourceParams这样设置的通常目的是想让数据源在一个单独的映射目录中实现也就是通常这段代码出现在Context docBase具体目录(如D:\webapps\myjsp) path访问名称(如/myjsp) reloadabletrue/Context这样就可以通过访问http://localhost:8080/myjsp/XXX.jsp来访问D:\webapps\myjsp中的某个jsp页面进而调取数据源或进行其它操作调取数据源。问题是无论哪种方法大家都没有进行连接如果不进行ResourceLink也免或者bean等无法找到你设置的代码又怎么找到driverClassName和url呢实际上任何一个参数设置都不会被找到的[解决方法] 知道了原因解决也就方便了。无论你是使用哪种方法。 解决方法一 如果想在某个映射目录内实现ResourceLink就在Context .../Context中间添加ResourceLink global数据源名称 name映射后的名称 typejavax.sql.DataSource/注意如果你不了解代码关联关系一定紧紧贴在Context ...后写就好。 解决方法二 如果想变成全局性的在所有映射目录中均可以使用就干脆写在$Tomcat/conf/context.xml中万事OK了。 一般大家把“数据源名称”和“映射后的名称”设置成同一个例如我是这样设置的ResourceLink globaljdbc/test namejdbc/test typejavax.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 namejdbc/test //数据源名称 typejavax.sql.DataSource driverClassNamecom.mysql.jdbc.Driver //这就是我刚才提到的driverClassName的设置 passwordadmin //数据库密码 maxIdle2 maxWait5000 usernameroot //数据库用户名 urljdbc:mysql://localhost:3306/test?autoReconnecttrue //数据库URL就是刚才提到的url maxActive4/注释参数记得更改成自己的。第二设置Resource连接。推荐在$Tomcat/conf/context.xml中写入ResourceLink global数据源名称 name映射后的名称 typejavax.sql.DataSource/如果想就在某个单独映射目录实现就在$Tomcat/conf/server.xml中需要映射的目录中的Context ...后写入。第三将JDBC拷贝到$Tomcat\common\lib中另外我在这里不详细说明如何调用数据源这个问题比较简单但要注意DataSource ds(DataSource)envCtx.lookup(引用数据源);语句中引用数据源只的是映射后的名称不是数据源名称所以我建议大家方便起见把两个名字设成同一个。而且特别要注意及时释放闲置资源不然连接池就会溢出