
关于Tomcat与MySQL连接池问题的解析(原创)
研究了两天,终于有所收唬望对蒜所帮助。首先请储意:这里尤其讨论Tomcat5.5版本中幽问题,为什么尤其单对这妇,我一会儿便加以说胋r>
问题一:Cannot create JDBC driver of class '' for connect URL 'null'
碽r>[原襯>很多炮配置好$Tomcat/conf/server.xml、$Tomcat/conf/context.xml、蒃B-INF/web.xml褐惮接池便会喝上错沃位般是一有邦定数据源(实际错蝦iverClassName、url的设置为空,但聪定不会忘掉设置这附,所以肯定是磋置完了没有进行连结!)。通常翠置数据源有两种方法(在$Tomcat/conf/context.xml的设置方式就不单算了),一种是在$Tomcat/conf/server.xml的</GlobalNamingResources>前添加如下代码:
设置方式一:
<Resource
//数据源名称
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图形界面中配置操譩r>另一种发法是在$Tomcat/conf/server.xml的<Context ...></Context>中加入如下代码:
设置方式二:
<Resource auth="Container" type="javax.sql.DataSource"/>

<ResourceParams>
<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>,这样就可以通过访问:8080/myjsp/XXX.jsp来访问D:\webapps\myjsp中的某敢趁娼菰椿衅渌僮∈菰础Ⅻbr>
问题是,无论哪种方式,醇没有进行连结!如果不进行ResourceLink,也免籩an等未能找到你设置的代码,又砸至driverClassName跟url呢?实际上任何一庚设置都不会被找到的!

[解鲸]
知道了本意就便于了。无论你是使用哪种方式。
解鲸一:
如果想在某镐目录内实现ResourceLink,就在<Context ...></Context>中间添加<ResourceLink global="数据源名称" type="javax.sql.DataSource"/>,注意假如你不了解代码关联关系,一定靳在<Context ...>和好。
解鲸二:
如果想弄成全局性的,在所有映射目录中均可以使用,就干脆写在$Tomcat/conf/context.xml中,蚄了。
一般囟“数据源名称”和“映射蝴称”设置成同一庚如我是这么设置的<ResourceLink global="jdbc/test" type="javax.sql.DataSource"/>。
另外应当说泌Tomcat5.5中,如果你川第二种设置方式,即使加上ResourceLink,也会踊能正常运行的问题。
问题二:javax.naming.NameNotFoundException: Name XXX is not bound in this Context
碽r>[原襯>Tomcat5.5中好空间网络 下载源码,在<Context ...><Context>中设置数据源不能正常运行,我看过一位外国人写的贴子,我数学水平不高,不过碰巧能读懂。他说这是胰较高的版本中(应该是说Tomcat跟dbcp),factory的值由org.apache.commons.dbcp.BasicDataSourceFactory改为了org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory。但是我进行过尝试,并不能解锯。而且我发觉Tomcat5.5标准版本自带dbcp,就在$Tomcat\common\lib中。我看过另一秆的解说,他说用第二种设置方式是不行的。这说摸种设置方式只适用先前版本好空间网络 下载源码,现在的版本我不知道要在哪部份啄,但错坞一拼设置,服我不到“数据源名称”对应的数据源。
[解鲸]
知道原疑以解籼看来只有把数据源声胠t;GlobalNamingResources>中能够泼。所以赐根据第一种设置方式设置Tomcat5.5(这就是我为何尤其讲Tomcat5.5)就可以了。
问题三:Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
碽r>[原襯>不光对于mysql,对于饼据库,只要找不到,就会抛硁not load JDBC driver class",那么为何会找不到驱动类呢?如何能够找到呢?其实挺迹
[解鲸]
只要把jdbc拷贝至$Tomcat\common\lib中就可以了。
问题四:Cannot get a connection, pool exhausted
[原襯>很棘不能推行连结,连接池溢斥说媚连结资源都耗费了,原毅没有及时回收他们。

[解鲸]
及时并正确使用close()方法释放ResultSet、Statement、Connection,具体句子我就不说了,推糹nally中写。
总结:所以,如果你想用Tomcat5.5推行一篙源连接池,只要三步。
第一:设置数据源,推技形操祖,如果自动就在$Tomcat/conf/server.xml中</GlobalNamingResources>前添加如下代码:
<Resource
//数据源名称
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连结。推糡omcat/conf/context.xml中写入<ResourceLink global="数据源名称" type="javax.sql.DataSource"/>,如果想就在某诜映射目录实现,就在$Tomcat/conf/server.xml中还要映射的目录中的<Context ...>弘。
第三:将JDBC拷贝至$Tomcat\common\lib中
另外,我在这里不具体说梦谍据源,这糍比较棘但要留意,DataSource ds=(DataSource)envCtx.lookup("引用数据源");语句中"引用数据源"只的是"映射蝴称",不是"数据源名称",所以我建议唇便蒲两钢设成同一给且特雹意及时释放闲置资源,不然连接池都会溢砨r>
以上是我叫究的一些成果,我还是抚者,希望这篇文章对蒜所帮助。有哪些问题可以联系我,我的邮箱是:lk_l@sina.com(爱看霓虹灯的人)。本文为neonlight.bokee.com(CSDN_MathMagician)原创,不可转载!2006年08月11日
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-135062-1.html
可能
疯了
虫子是绿色的标志