Tomcat 7 - Игнорирование параметров пула соединений БД (DBCP) - PullRequest
9 голосов
/ 07 мая 2019

Мы столкнулись с проблемой того, что количество подключений к базе данных разрывается при перезапуске Tomcat 7.

Ниже приведены наши конфигурации, настроенные для файла Tomcat context.xml:

<Resource auth="Container"
            driverClassName="oracle.jdbc.driver.OracleDriver"
            initialSize="1"
            maxActive="10"
            maxAge="600000"
            maxIdle="5"
            maxOpenPreparedStatements="200"
            maxWait="10000"
            minEvictableIdleTimeMillis="60000"
            minIdle="0"
            name="jdbc/backoffice"
            password="backoffice"
            poolPreparedStatements="true"
            rollbackOnReturn="true"
            testWhileIdle="true"
            timeBetweenEvictionRunsMillis="6000000"
            type="javax.sql.DataSource"
            url="jdbc:oracle:thin:@127.0.0.1:1521:DATABASE"
            username="backoffice"
            validationQuery="SELECT SYSDATE FROM DUAL"
            removeAbandoned="true"
            removeAbandonedTimeout="60"
            logAbandoned="true"
    />

После перезапуска Tomcat число открытых соединений приближается к 700. Повторное развертывание войны (переименование в ".war_bk" и переименование обратно в ".war") решает проблему.

Почему это происходит? Что мы можем сделать по-другому?

1 Ответ

3 голосов
/ 19 мая 2019

Добавить значения также для maxConnLifetimeMillis

maxConnLifetimeMillis -1 Максимальное время жизни в миллисекундах соединения. По истечении этого времени соединение не пройдет следующую проверку активации, пассивации или проверки. Значение ноль или меньше означает, что соединение имеет бесконечный срок службы.

А maxTotal

maxTotal 8 Максимальное количество активных соединений, которые могут быть выделены из этого пула одновременно, или отрицательно для неограниченного числа.

Вы можете изменить validationQuery на более простой запрос

validationQuery="SELECT 1 FROM DUAL"
...