mentby.com
Blog | Jobs | Help | Signup | Login

My db connections seem to be lost after an extended period of inactivity
(for a web application).  And the only way to get the connections to work
again is to restart tomcat.

My tomcat.jdbc.pool.Datasource settings have:

<property name="maxActive" value="100"/>
        <property name="maxIdle" value="30"/>
        <property name="maxWait" value="1000"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="removeAbandoned" value="true"/>
        <property name="removeAbandonedTimeout" value="60"/>

Is it the removedAbonded and abandonedTimeout?  Does it mean "after 60
seconds, remove the connection from the pool?

I guess what I need is a minActive setting then?


S Ahmed Wed, 04 Apr 2012 04:09:27 -0700

Do you have a connection validation query and test set?

E.g. testOnBorrow=true?

p

--

[key:62590808]


Pid Wed, 04 Apr 2012 05:45:35 -0700

There could be a number of reasons that this occurs.  Perhaps a network issue is causing them to be disconnected or the database may be timing them out.  At any rate, it's not likely that the problem would be caused by the "removeAbandoned" / "abandonedTimeout" settings, unless you application is not properly returning connections to the connection pool.

   https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-exa[..]

You probably want to add testOnBorrow="true" and "validationQuery=SELECT 1"  (or some other valid query for your DB).  See the following link for an explanation of those properties.

   https://commons.apache.org/dbcp/configuration.html

This will cause your connections to be validated prior to their use by your application.  Stale connections will be removed and replaced with new, working connections.

No.  See either of the links I've referenced above for an explanation of these settings.

There's no "minActive" setting.  You have "minIdle", but I don't think that would help here.

Dan


Daniel Mikusa Wed, 04 Apr 2012 05:46:46 -0700

N«yªÞ²u«Zm«²ØZµÚ ¢)ÚÚ^®*Æ¥)"Z}Ê'ç-


Barry L Propes Wed, 04 Apr 2012 06:54:22 -0700

you may want to explore the maxAge option for this, as we can disconnect and create new connections before the DB does kills it as long lived


Filip Hanik - Dev Lists Wed, 04 Apr 2012 08:58:48 -0700

Daniel,

Your suggestion seems to have worked so far, thanks!

testOnBorrow="true" and "validationQuery=SELECT 1"


S Ahmed Thu, 05 Apr 2012 20:28:30 -0700

Daniel,

+1

- -1

This is the wrong documentation for tomcat-pool. You're looking for http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

On the other hand, there was no mention of a Tomcat version, what type
of pool is actually being used (I inferred tomcat-pool from the
subject line as well as the use of "tomcat.jdbc.pool.DataSource") and
the use of <property> elements seems antiquated, so I must admit I'm a
little confused.

- -chris


Christopher Schultz Fri, 06 Apr 2012 11:10:18 -0700

I'm using tomcat 7, in a spring mvc application.  The properties is in my
spring-context.xml file.

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost/mydb"/>
        <property name="username" value="testuser"/>
        <property name="password" value="abc"/>

        <property name="maxActive" value="100"/>
        <property name="maxIdle" value="30"/>
        <property name="maxWait" value="1000"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="removeAbandoned" value="true"/>
        <property name="removeAbandonedTimeout" value="60"/>

        <property name="testOnBorrow" value="true" />
        <property name="validationQuery" value="SELECT 1" />

    </bean>


S Ahmed Fri, 06 Apr 2012 13:59:18 -0700



Related Topics

Post a Comment