Как использовать Java.sql.Connection.setNetworkTimeout?

Я столкнулся с точной проблемой, которую setNetworkTimeout должен решить согласнооракул, Запрос застрял в socket.read () на несколько минут.

Но я понятия не имею, каким должен быть первый параметр для этого метода. Отправка нулевого значения вызывает исключение AbstractMethodError, так что ... нужна ли реализации какой-то пул потоков только для установки таймаута сети?

Есть ли способ достичь того же эффекта без запуска пула потоков только для этого одного условия?

Ответы на вопрос(1)

Решение Вопроса

что документация объясняет это ужасно, но, не глядя на какой-либо код за классом, я предполагаю, что вы должны передать экземпляр Executor методу, чтобы реализации могли порождать задания / потоки для проверки состояния связь.

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

Похоже, что было принято проектное решение, что вместо того, чтобы драйвер JDBC реализовывал внутреннюю логику, а именно, как / когда порождать потоки, чтобы справиться с этим, API хочет, чтобы вы как клиент передали Executor, который будет использоваться для проверки тайм-ауты. Таким образом, вы, как клиент, можете контролировать такие вещи, как частоту выполнения проверки, предотвращая появление в вашем контейнере большего количества потоков, чем вам нравится, и т. Д.

Если у вас еще нет экземпляра Executor, вы можете просто создать его по умолчанию:

conn.setNetworkTimeout(Executors.newFixedThreadPool(numThreads), yourTimeout);

Ваш ответ на вопрос