반응형

Spring Boot를 작업하다보면, 간혹 해당 에러에 대해서 확인할 수 있다.

별도의 설정을 하지 않는다면, Spring Boot에서는 Hikari가 기본적으로 제공되는데, 해당 기본 세팅이 연결한 DBMS 세팅과 차이가 존재하여, Connection 에러가 뜨는 것이라고 볼 수 있다.

 

java.sql.SQLException: Connection.setNetworkTimeout cannot be called on a closed connection
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getSqlException(ExceptionMapper.java:277) ~[mariadb-java-client-2.4.4.jar!/:na]
        at org.mariadb.jdbc.MariaDbConnection.setNetworkTimeout(MariaDbConnection.java:1700) ~[mariadb-java-client-2.4.4.jar!/:na]
        at net.sf.log4jdbc.sql.jdbcapi.ConnectionSpy.setNetworkTimeout(ConnectionSpy.java:1120) ~[log4jdbc-log4j2-jdbc4.1-1.16.jar!/:na]
        at com.zaxxer.hikari.pool.PoolBase.setNetworkTimeout(PoolBase.java:556) [HikariCP-3.4.2.jar!/:na]
        at com.zaxxer.hikari.pool.PoolBase.quietlyCloseConnection(PoolBase.java:133) [HikariCP-3.4.2.jar!/:na]
        at com.zaxxer.hikari.pool.HikariPool.lambda$closeConnection$1(HikariPool.java:447) [HikariCP-3.4.2.jar!/:na]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_252]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_252]
        at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_252]

 

우선, 설정을 변경하기 전에 DB에 설정된 값을 확인하여야하는데, 해당 SQL을 통해 확인할 수 있다.

 

SHOW variables LIKE '%time%'

 

 

해당 SQL을 사용시, 아래와 같은 결과 값을 볼 수 있으며 여기서 두 가지의 데이터를 매핑 시키면 된다.

 

DB HikariCP
wait_timeout max-lifetime
connect_timeout connection-timeout
  • max-lifetime : 커넨션의 최대 유지 시간 설정. 사용중인 커넥션은 maxLifetime에 상관없이 제거되지않고, 사용중이지 않을 때만 제거된다. 0으로 설정하면 무한 lifetime이 적용되지만, idle-timeout 설정되어 있는 경우에는 적용되지 않는다. (default: 1800000 (30분))
  • connection-timeout : pool에서 커넥션을 얻어오기전까지 기다리는 최대 시간. 허용가능한 시간을 초과하면 SQLException이 발생하며, 설정가능한 가장 작은 시간은 250ms 이다. (default: 30000 (30초))

해당 데이터의 시간을 확인하고, DB의 경우는 초(seconds) 단위 HikariCP의 경우 밀리세컨드(millisecond) 단위를 사용하기 때문에 변환기를 사용하거나 혹은 계산하여 HikariCP에 설정할 시간을 계산한 뒤에 1~2초 정도 적게 설정하면 된다

계산이 다 끝난 경우에는 properties 파일에 해당 데이터를 입력하면 해당 에러를 해결할 수 있다.

 

spring.datasource.hikari.connection-timeout=58000
spring.datasource.hikari.max-lifetime=580000
반응형

+ Recent posts