티스토리 뷰

MariaDB 10.1.x 버전과 Spring Boot 2.2.5 버전 사용중

아래와 같은 에러가 간헐적으로 떨어지더라

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_212]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_212]
        at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_212]

 

일단 Spring Boot 2.x 버전에서 CP를 기본으로 Hikari CP를 쓴댄다

대충 보자면 Connection Pool 에서 가지고 있는 커넥션을 아마 mariaDB에서 끊은 모양이다

MariaDB에서 wait_timeout 값을 확인하고 (60s 라고 할 때)

Spring Boot 프로퍼티에 아래와 같이 max-lifetime 을 설정해준다. (단위는 ms)

spring:
    datasource:
        hikari:
            max-lifetime: 58000

문서 보면 DB timeout 값의 1~2초 적게 설정해주는걸 권장한다는군..

 

아마 DBMS에서 커넥션을 끊기 전에 회수하는 것 같음

(참고로 Hikari는 idle connection 을 다루지 않고 connection을 끊고 새로 맺는 방식을 취한다고 함)

 

 

'Programming & Solution > Java' 카테고리의 다른 글

[Junit] 템플릿  (0) 2021.03.10
[SpringBoot] https / http2 적용  (0) 2020.04.21
[SpringSecurity] URL 더블슬래시 허용  (1) 2019.08.28
[SpringBoot] OAUTH2 설정  (0) 2019.08.22
[SpringBoot] Redis 연계 (Pub/Sub)  (0) 2019.08.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함