2013-02-19 3 views
2

제 응용 프로그램에서 Spring과 JdbcDAOSupport를 사용하여 TCP/IP를 통해 MSSQL 데이터베이스에 연결합니다. 연결이 안정되면 제대로 작동하지만 결과 세트를 반복하면서 이더넷 케이블을 뽑으면 응용 프로그램이 일시 중단됩니다. 예외는 발생하지 않습니다.ResultSet을 반복하는 동안 JDBC 연결이 끊어졌습니다.

JdbcTemplate jdbc = getJdbcTemplate(); 
return jdbc.query(sql, mapper, someArgs); 

mapper는 내 자신의 RowMapper 클래스입니다. Connection 및 PreparedStatement를 사용하여 시도했지만 문제가 해결되지 않습니다. 아무도 이것에 대한 해결책이 없거나 비슷한 문제가 있습니까?

답변

3

TCP/IP가 잘못된 연결을 염두에두고 설계 되었기 때문에 응용 프로그램이 멈 춥니 다. 패킷이 목적지에 도달하지 않으면 발신자는 단순히 지수 적 백 오프로 다시 시도합니다. 이 동작이 바람직하지 않은 경우 소켓 차단 시간 초과 (SO_TIMEOUT)를 구성합니다.

SQL Server JDBC 드라이버에는 소켓 시간 제한을 구성하는 옵션이 없으므로 무한정 차단됩니다.

Nathan Hughes가 언급 한 바에 따르면 jTDS driver에는 socketTimeout을 구성 할 수있는 옵션이 있으므로 대신 해당 드라이버를 사용해 볼 수 있습니다.

+1

어쩌면 jtds를 시도할까요? 그것은 소켓 시간 초과 (http://jtds.sourceforge.net/faq.html) –

+1

@ NathanHughes 보이는 유일한 옵션, 예 –

+0

@ NathanHughes 내가 시도 loginTimeout 아직 아무것도 –

관련 문제