Подтвердить что ты не робот

Попытка повторного подключения источника данных jdbc пула после перезапуска базы данных

У меня есть веб-приложение с back-end Java, которое использует Tomcat jdbc-pool для соединений с базой данных. Это прекрасно работает.

Однако я пытаюсь проверить его до экспорта в другие места, и недавно произошел сценарий, когда кто-то перезапустил службу базы данных SQL Server, но не перезапустил службу Tomcat. Это вызвало SQLException: java.sql.SQLException: I/O Error: Connection reset by peer: socket write error, пока я не перезапустил Tomcat, заставив источник данных jdbc-pool повторно подключиться.

Я искал какую-то конфигурацию в документах Tomcat jdbc-pool, чтобы сообщить источнику данных попытаться снова подключиться, но я ничего не нашел.

Кто-нибудь знает, есть ли какая-то конфигурация для этого или я должен проверить это условие перед каждым запросом?

4b9b3361

Ответ 2

Проверяя ту же проблему, я столкнулся с этим сообщением, у которого есть конфигурации автоматического подключения для всех серверов приложений.

Ниже приведена конфигурация, которую я использовал для автоматического подключения в tomcat для справки.

    <Resource auth="Container"
driverClassName="oracle.jdbc.OracleDriver"
initialSize="5"
maxActive="120"
maxIdle="5"
maxWait="5000"
name="jdbc/oracle/myds"
password="secret"
poolPreparedStatements="true"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@DBHOSTNAME:1521/ServiceName"
username="testuser"
validationQuery="select 1 from tab"
testOnBorrow="true"/>

Конфигурации автоматического подключения для всех серверов приложений можно найти здесь, в Автозапуск источника данных на серверах приложений Java.

Ответ 3

Просто добавьте ответ Натан Кокс

Ссылка - http://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html#Common_Attributes

<Resource type="javax.sql.DataSource"
        ...
        testOnBorrow="true"
        validationQuery="SELECT 1"
        removeAbandoned="true"
        />

В отличие от Geronimo, я все равно хотел бы использовать validationQuery

Валидация базы данных Замечания по безопасности

hsqldb - select 1 from INFORMATION_SCHEMA.SYSTEM_USERS

Oracle - select 1 from dual

DB2 - select 1 from sysibm.sysdummy1

mysql - select 1

Microsoft SQL Server - select 1

postgresql - select 1

ingres - select 1

дерби - values 1

H2 - select 1

Firebird - select 1 from rdb$database

Ссылка - DBCP - validationQuery для разных баз данных