Topic: tomcat连接池支持重新连接数据库吗?

  Print this page

1.tomcat连接池支持重新连接数据库吗? Copy to clipboard
Posted by: pigengler
Posted on: 2006-04-20 15:23

我做了一个测试,程序使用tomcat的连接池
<ResourceParams name="jdbc/info">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test</value>
</parameter>
<parameter><name>username</name><value>sa</value></parameter>
<parameter><name>password</name><value>teesd</value></parameter>
<parameter><name>maxActive</name><value>100</value></parameter>
<parameter><name>maxIdle</name><value>50</value></parameter>
<parameter><name>removeAbandoned</name><value>false</value></parameter>
<parameter><name>maxWait</name><value>-1</value></parameter>
</ResourceParams>

测试一、当我的tomcat启动以后,如果数据库重启了,tomcat的连接池就再也连接不到数据库了。。
测试二、tomcat启动的时候,数据库处于关闭状态,tomcat启动以后,再打开数据库,tomcat可以连接到数据库,但是如果数据库再次重启,tomcat的连接池就再也连接不到数据库了。。

tomcat在哪里可以配置在数据库重启之后,重新连接数据库????

2.Re:tomcat连接池支持重新连接数据库吗? [Re: pigengler] Copy to clipboard
Posted by: pigengler
Posted on: 2006-04-20 15:27

在网上找到这样的一篇文章,,,但是测试了以后好像不行。

tomcat连接池自动重新连接问题- -
Tag: Tag tomcat 连接池 重新连接
在以往的开发中,常常遇到tomcat连接池断掉后(比如网络断线),无法自动重新连接,导致数据库连接始终无效,今天发现此问题的一个解决方案。
首先,在连接池的配置中(XXX.XML),DB的url后加上参数,如sqlserver的加;autoReconnect=true,
这是自动重连的基础保证。
其次,一定要在tomcat中抛出连接异常,这一点很重要。一般我们的连接都会用class封装起来,一场也会在class中捕获,并处理掉,这样会导致连接无法自动恢复。估计tomcat所带的dbcp连接池的重连机制是捕获tomcat中抛出的连接异常再重新连接,所以,连接异常一定要被抛出而不是自行处理掉。否则连接池会无法重新连接。
所以,实现tomcat自带连接池dbcp自动重连的解决方案是,1。加上autoReconnect=true的参数 2。连接异常要被抛出

3.Re:tomcat连接池支持重新连接数据库吗? [Re: pigengler] Copy to clipboard
Posted by: pigengler
Posted on: 2006-04-20 15:55

还有一点比较奇怪的是,当数据库已经down了的时候,我的测试程序向连接池申请连接,连接池居然成功的返回一个连接,但是用这个连接执行SQL的时候,就会抛出SQLException Connection reset by peer: socket write error。。。。。

当我的数据库重启动以后,就一直都报这个错了。系统就再也连接不上了。

DEBUG 2006-04-20 15:54:54,334 | CatalogService:getCatalogById | 申请org.apache.commons.dbcp.PoolableConnection@79801c
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Connection reset by peer: socket write error
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)

4.Re:tomcat连接池支持重新连接数据库吗? [Re: pigengler] Copy to clipboard
Posted by: bluepure
Posted on: 2006-04-20 16:32

dbcp好像不支持,autoReconnect=true是连接 mysql的专用参数

建议用proxool作连接池。

在tomcat里的配置为:

<context>
<Resource
name="jdbc/mydatasource"
auth="Container"
type="javax.sql.DataSource"
factory="org.logicalcobwebs.proxool.ProxoolDataSource"
proxool.alias="hrs"
user="joe"
password="******"
delegateProperties="foo=bar"
proxool.driver-url="jdbc:oracle:thin:@127.0.0.1:1521:DB"
proxool.driver-class="oracle.jdbc.driver.OracleDriver"/>
</context>

5.Re:tomcat连接池支持重新连接数据库吗? [Re: pigengler] Copy to clipboard
Posted by: pigengler
Posted on: 2006-04-24 08:30

其他的兄弟没有什么意见和看法吗?

6.Re:tomcat连接池支持重新连接数据库吗? [Re: pigengler] Copy to clipboard
Posted by: bluecrystal
Posted on: 2006-07-14 17:15

建议不要用dbcp


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923