java.net.SocketException: сокет закрыт: обработать прерывание соединения - PullRequest
0 голосов
/ 25 мая 2018

У меня слабое соединение с сервером базы данных, и длительный запрос, который равен , иногда , не выполняется, за исключением:

Caused by: java.sql.SQLException: I/O Error: Socket closed
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2481)
    at net.sourceforge.jtds.jdbc.TdsCore.getNextRow(TdsCore.java:805)
    at net.sourceforge.jtds.jdbc.JtdsResultSet.next(JtdsResultSet.java:611)
Caused by: java.net.SocketException: Socket closed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:152)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at java.io.DataInputStream.readFully(DataInputStream.java:195)
    at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:885)
    at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:731)
    at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:477)
    at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:146)
    at net.sourceforge.jtds.jdbc.TdsData.readData(TdsData.java:901)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsRowToken(TdsCore.java:3175)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2433)

Как можно обработать прерывание соединения?в настоящее время мне приходится вручную перезапускать операцию, пока она не будет успешно выполнена, возможно, это можно сделать на уровне драйвера jdbc

ps свойство socketTimeout, похоже, не влияет на это

1 Ответ

0 голосов
/ 25 мая 2018

Вы уверены, что это из-за того, что запрос / процедура занимает много времени?Поскольку ошибка Socket closed обычно означает, что что-то пошло не так с самим сетевым подключением, в основном то, что ваш драйвер не может контролировать ...

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

...