programing

연결의 유효성을 검사하지 못했습니다(이 연결이 닫혔습니다.).더 짧은 maxLifetime 값을 사용하는 것을 고려할 수 있습니다.

abcjava 2023. 7. 20. 21:39
반응형

연결의 유효성을 검사하지 못했습니다(이 연결이 닫혔습니다.).더 짧은 maxLifetime 값을 사용하는 것을 고려할 수 있습니다.

다음 오류 메시지가 나타납니다.

HikariPool-1 - 연결 org.postgresql.jdbc를 검증하지 못했습니다.PgConnection@f162126 (이 연결은 지금까지
비공개)더 짧은 것을 사용하는 것을 고려할 수 있습니다.maxLifetime가치.
동일한 페이지를 자주 새로 고치면 다음과 같은 경고가 표시됩니다.
초과의maxLifetime

원래 데이터베이스 구성은 다음과 같습니다.

spring.datasource.hikari.auto-commit=false  
spring.datasource.hikari.idleTimeout=180000  
spring.datasource.hikari.minimumIdle=5  
spring.datasource.hikari.leakDetectionThreshold=240000    
spring.datasource.hikari.maximumPoolSize=10  
logging.level.com.zaxxer.hikari=TRACE  
spring.datasource.hikari.connectionTimeout=30000  
spring.datasource.hikari.maxLifetime=300000  
logging.level.com.zaxxer.hikari.HikariConfig=DEBUG  

다음 속성을 변경하면 응용 프로그램이 정상적으로 작동합니다.

spring.datasource.hikari.maximumPoolSize=100
spring.datasource.hikari.maxLifetime=60000

정확히 무슨 일이 일어나고 있는지 설명할 수 있는 사람이 있습니까?

오류 메시지에서 알 수 있듯이 이 문제는 Hikari 연결 풀이 이미 닫힌 연결을 사용하려고 시도했기 때문에 발생합니다.

데이터베이스 연결은 TCP 연결일 뿐이며 너무 오랫동안 유휴 상태로 있으면 데이터베이스 또는 중간에 있는 방화벽에 의해 닫힐 수 있습니다.

히카리 CP는 연결 상태가 아직 살아 있고 사용할 수 있는지 확인하고 있습니다.새 연결을 열면 데이터베이스 액세스에 지연 시간이 추가되기 때문에 이미 닫힌 경우 경고 메시지가 표시됩니다.메소드에서 발생하는 오류를 볼 수 있습니다.isConnectionAlive 여기에

클라이언트 측

오류 메시지에서 알 수 있듯이, 당신은 그것을 줄일 수 있습니다.maxLifetime이 문제를 해결하기 위한 구성입니다.

maxLifetime속성은 클라이언트에 의해 연결이 닫히기 전의 시간입니다.Hikari CP 설명서에서 제안하는 것처럼 데이터베이스/아키텍처 시간 제한보다 최소 몇 초 짧아야 합니다.

그 이유는 Hikari CP가 항상 데이터베이스보다 먼저 연결을 닫으면 이미 닫힌 연결을 사용하려고 하지 않기 때문입니다.

저는 당신의 데이터베이스나 아키텍처를 모르기 때문에 이것이 어떤 가치가 있어야 하는지 제안할 수 없습니다.정확하게 설정하려면 연결의 유휴 시간 제한을 확인해야 합니다.maxLifetime배열.

이 숙박업소에 대한 설명서는 히카리 깃허브에서 읽을 수 있습니다.

데이터베이스 측면

TCP 시간 초과의 병목 현상이 방화벽 등이 아닌 데이터베이스인 경우 영향을 미칠 수 있는 Postgres에 대한 일부 연결 설정도 있습니다.

이에 대해 언급하고 싶었지만 일반적으로 합리적인 기본값이기 때문에 변경할 필요가 없습니다.

속성에 대한 설명서는 연결 설정 Postgres 설명서에서 찾을 수 있습니다.

찾고 있는 속성은 다음과 같습니다.

tcp_keepalive_cisco

OS가 킵얼라이브 메시지를 보내기 전에 TCP 연결이 유휴 상태여야 하는 시간입니다.

tcp_keepalive_cisco

OS가 승인되지 않은 킵얼라이브 메시지를 보낸 후 재시도하는 시간입니다.

tcp_keepalive_count

연결이 비활성 상태로 간주되기 전에 보낼 수 있는 승인되지 않은 킵얼라이브 메시지 수입니다.

언급URL : https://stackoverflow.com/questions/60301008/failed-to-validate-connection-this-connection-has-been-closed-possibly-consi

반응형