Hello,

kok nae-ga ha-myun an-dweneun MAGIC...🧚

웹 프로그래밍

No operations allowed after connection closed 오류 해결

✿도담도담 2018. 5. 23. 11:50

JSP를 MySQL과 연동하고 있는 도중 잘 되던 코드에서 갑자기 아래과 같은 오류가 발생했다.

 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

구글에 찾아보니 오류가 발생하는 이유는 MySQL 커넥션이 일정 시간동안 미 사용되어 커넥션이 해제되어 발생하는 문제라고한다.

이런 경우 재접속을 해주어야한다.

https://forums.mysql.com/read.php?39,112048,112146#msg-112146

MySQL 사이트에 들어가보면 실제로 8시간 후에 종료된다고 설명되어 있으며, 대부분 경험하는 오류라고한다. 😠

한 가지 해결책으로 제시 된 것이 autoReconnect 을 사용하는 것이라 적혀있다.

이는 쿼리를 수행한 다음 DB 세션에 문제가 있다면 SQLException 리턴 후 재접속을 처리 한다.

여기서 하나의 문제가  수행중이던 트랜잭션은 롤백이 되어야 하고, 남은 트랜잭션은 수행이 되지 않아야 되는데, 

autoReconnect 옵션은 이런 처리를 해주지 않는다.


따라서, 많은 구글 사이트에 봐도 알겠지만 validationQuery 구문으로 이를 해결해 준다.

우리는 validationQuery 옵션에 설정된 쿼리를 실행해 JDBC 커넥션의 유효성을 확인할 수 있다.

유효성을 검사할 때는 validationQuery 옵션에 하나 이상의 결과를 반환하는 쿼리를 설정해야 한다.

그래서 validationQuey="select 1"이라고 사용하는 것이다.

참고: http://kshmc.tistory.com/entry/MyBatis-Datasource




하지만 나는 "jdbc:mysql://localhost:3306/plit?autoReconnect=true&validationQuery=select 1" 이와 같이

사용했음에도 불구하고 계속해서 똑같은 오류를 발생 시켜서 봤더니..

단지 나의 실수로 내가 연결을 close해주고 다시 쓸려고 했던것..( 황당 ) 

쨋뜬 어이없는 나의 실수로 새로운 오류 해결법을 알고 간다 😅