본문 바로가기

Programming!

Spring Boot 1.4.1 -> 1.5.6 로 올리면서 트러블 #2

이 문제는 spring 의 문제로 볼 수는 없지만, 1.5.6에서 정식으로 HikariCP지원이 되어 관련 lib도 2.6.2로 같이 올리면서 일어난 문제.

 

Application을 실행시키고 일정시간이 지나면 꼭 뜨는 메시지가 있다.

WARN com.zaxxer.hikari.pool.PoolBase          
: HikariPool-1 - Failed to validate connection com.mysql.jdbc.JDBC4Connection (No operations allowed after connection closed.)

 

얼추 끊어진 커넥션을 재사용하려고 하는 이유로 나타나는 경고로 보고 새로운 property 의 적용도 해볼겸 이래저래 수정을 해봤다.

...
spring.datasource.hikari.minimum-idle=20
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.idle-timeout=600000 (10분)
spring.datasource.hikari.max-lifetime=1800000 (30분)
spring.datasource.hikari.connection-timeout=15000
spring.datasource.hikari.validation-timeout=10000
등등등

 

max-lifetime도 바꿔보고 idle-timeout도 바꿔보고.. 물론 해봐야 예상과는 다르게 문제가 해결되지 않는다.. 엌!!!(당연히 autoreconnected property도 안먹는..)

 

더 큰 문제는 로컬에서는 전혀 문제가 없다는거.. 

 

늘 그렇듯 결과적으로는 설정에 문제... 

 

바로 mysql의 wait_timeout... 이게 기본 설치시 8시간으로 지정되어 있는데 개발환경/운영환경의 설정은 300 즉 5분으로 수정되어 있다.( 개발 및 운영 DB서버는 DBA가 관리 )

 

- MySQL SQL

show global variables like 'wait_timeout';

 

서버 설정은 생각도 못하고 주구장창 application 설정만 의심하고 코드 디버깅만 했던 것.. 어우~ OTL..

 

나에겐 mysql의 설정을 수정할만한 배짱이 없으니~^^;hikariCP의 max-lifetime, idle-timeout를 5분 밑으로 잡는걸로 해결했다. 

30분이 지난 지금까지 warn이 없는걸 보니 해결된듯 싶다..