0

JdbcTemplate 클래스를 사용하여 Mysql 서버에서 데이터베이스 프로그래밍을 수행 할 때 SpringFramework와 함께 Java를 사용하고 있습니다.연결 유휴 시간 초과 오류를 올바르게 처리하는 방법

db 데이터 원본으로 org.apache.commons.dbcp.BasicDataSource을 사용하십시오.

The last packet successfully received from the server was XXXXX milliseconds ago. 

내가 연결에 autoReconnect 매개 변수를 추가하여이 문제를 처리하지 않으려 또는를 추가 : 연결이 오랜 시간 동안 유휴 상태 인 경우에

, CommunicationException는 다음과 같은 메시지가 발생되고있다 속성을 사용하여 각 쿼리 앞에 select 1을 실행하여 연결이 제대로 열려 있는지 확인하십시오. 나는 또한 mysql 서버의 구성을 만지고 타임 아웃 값을 높이기를 원하지 않는다.

내가 뭘하고 싶은지 제대로 예외를 처리하는 것입니다.

나는 CommunicationException을 잡아서 성공할 때까지 다시 시도하고 X 회 이상 실패한 경우 X 번에 대해 다시 시도하는 것이 실패했다는 Exception을 throw합니다.

  • 이 문제를 해결하는 방법에 대한 다른 아이디어가있는 사람이 있습니까?
  • 내 아이디어는 어떻습니까? :)
  • 어쩌면 springframework에 자동으로 저를위한 무언가가있을 것입니다.

모든 정보가 크게 감사하겠습니다.

감사합니다.

+0

왜 autoReconnect를 사용하지 않으시겠습니까? – EJP

+0

autoReconnect 매개 변수가 더 이상 사용되지 않습니다. – ufk

+1

"연결 상태 또는 데이터베이스 상태 정보의 손상 위험없이 MySQL 서버에 안전하게 다시 연결할 수있는 방법이 없으므로 autoReconnect 옵션을 사용하지 않는 것이 좋습니다. 풀에서 사용 가능한 연결을 사용하여 응용 프로그램을 MySQL 서버에 연결할 수있게하는 연결 풀. autoReconnect 기능은 향후 제공되지 않을 예정이며 이후 릴리스에서 제거 될 수 있습니다. ", http://dev.mysql.com/doc /refman/5.1/en/connector-j-usagenotes-troubleshooting.html#qandaitem-21-3-5-3-1-4 – ptomli

답변

1

쿼리가 다시 시작 가능한 경우 다시 시도하는 것이 좋습니다. 나는 우리가 장소에서 이것을하는 것을 알고있다. 그리고 그것은 이상하고 일시적인 결함을 위해 잘 작동한다. 우리는 정말로 희귀해야만하기 때문에 이벤트를 기록합니다.

연결 오류은 수명의 일부이며 연결 시간 초과과 다르게 처리해야합니다.

당신이 너무 오래 당신은 또한 BasicDataSourcetestOnBorrowtestOnReturn 속성을 볼 수에 대한 연결의 보류를 유지하지 않으면 실패 "손에"당신이 가지고있는 연결을 처리하는 온건 한 방법이 있어야하지만. 이것들은 각각의 쿼리 전에 반드시 핸들을 수집하지 않는 한 반드시 각 쿼리 이전에 테스트 선택을 의미하지는 않습니다.

풀에 연결 수가 많고 시간 제한을 중지 할 정도로 자주 사용되지 않는 경우 구성 오류입니다. 그것을 피하기 위해 코드를 작성하는 것은 약간 뒤떨어 보인다.