Долгое время ожидания вызова jdbc, когда сервер базы данных oracle недоступен - PullRequest
0 голосов
/ 30 сентября 2019

Я создаю пользовательские проверки работоспособности для службы весенней загрузки, которая подключается к 7 различным базам данных Oracle. Я хотел построить их так, чтобы я мог использовать spring-boot-admin для мониторинга сервисов. Проблема в том, что когда сервер недоступен, например, он выходит из строя или брандмауэр настроен неправильно, тайм-аут занимает очень много времени, одну минуту. Затем Spring-boot-admin помечает сервер как недоступный, а не выключенный.

Насколько я понимаю, происходит то, что сокет никогда не соединяется, и в конечном итоге соединения попадают в другое время ожидания. В ходе проверки работоспособности я попытался настроить время ожидания сети, но, похоже, это не имеет значения. Мы используем

https://docs.oracle.com/en/database/oracle/oracle-database/18/jjuar/oracle/ucp/jdbc/PoolDataSourceImpl.html

и ojdbc7

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

Я устал от этих проблем, но они, похоже, ничего не делают

Посмотрел эти ссылки

Настройка таймаута сети для соединения JDBC

JDBC getConnection Тайм-аут проблема

PreparedStatement никогда не будет тайм-аут, даже если явно установлен

Это дает более подробную информациютипов таймаутов.

https://www.programering.com/a/MDNzIjMwATY.html

Итак, мой вопрос: как на самом деле настроить пул оракула, чтобы справиться с сетью / сокетом, транзакцией, пулом и таймаутами операторов?

1 Ответ

0 голосов
/ 18 октября 2019

рекомендуемый URL-адрес подключения, как показано ниже. Кроме того, обратитесь к UCPTimeouts.java для проверки свойств, связанных с тайм-аутом.

 (DESCRIPTION =
         (CONNECT_TIMEOUT=90)  (RETRY_COUNT=20)(RETRY_DELAY=3) (TRANSPORT_CONNECT_TIMEOUT=3) 
           (ADDRESS_LIST =
            (LOAD_BALANCE=on)
            ( ADDRESS = (PROTOCOL = TCP)(HOST=primary-scan)(PORT=1521)))
            (ADDRESS_LIST =
             (LOAD_BALANCE=on)
            ( ADDRESS = (PROTOCOL = TCP)(HOST=secondary-scan)(PORT=1521)))
           (CONNECT_DATA=(SERVICE_NAME = gold-cloud)))
...