2013-07-06 3 views
0

MySQL 연결이 서버에 의해 시간 초과되었는지 여부를 테스트하는 Java의 표준 접근 방식은 무엇입니까? (com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 73.596.145 milliseconds ago ...)MySQL 연결이 서버 (Java)에 의해 시간 초과되었는지 테스트하는 방법은 무엇입니까?

일부 기사는 연결 상태를 유지하기 위해 주기적 핑을 권장했습니다. 이 작업을 수행하는 별도의 스레드를 시작할 수 있습니다. 그러나 필요한 경우에만 수행하고 다시 연결할 수있는 간단한 테스트가 있습니까? 또는 주기적으로 여기에 가기위한 최상의 성능을 핑 분석하고 있습니까?

boolean java.sql.Connection.isClosed() 상태 "이 메서드는 Connection.close 메서드가 호출 된 후에 만 ​​true를 반환하도록 보장됩니다."그리고이 작업은 저를 위해 수행되지 않을 것이라고 추측합니다.

마지막 요청 이후로 내부적으로 초를 추적 할 수 있으며,이 시간을 select @@wait_timeout;과 비교하고 너무 오래 걸리면 다시 연결하십시오.

그래서 연결이 시간 초과되었거나 연결 상태를 유지하는 표준적인 방법은 무엇입니까?

미리 감사드립니다.

+1

http://stackoverflow.com/questions/3668506/efficient-sql-test-query-or-validation-query-that-will-work-across-all-or-most –

+0

@rene : 감사합니다! – dotwin

답변

1

동일한 문제가 발생했습니다.

테스트해야 용액은로 java.sql.Connection에서 "isValid (INT 시간 초과)"메소드를 호출하는 MySQL은

또는 세트 autoreconnect : http://dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html

또는 MySQL은 타임 아웃을 변경할 (기본값 = 8 시간) : http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeout

EDIT :하지만 가장 좋은 방법은 트랜잭션 중에 연결을 연 다음 바로 닫는 것입니다.