source

풀에서 잘못된 데이터베이스 연결을 제거하는 방법

factcode 2023. 7. 23. 14:45
반응형

풀에서 잘못된 데이터베이스 연결을 제거하는 방법

오라클 데이터베이스와 함께 Tomcat의 연결 풀링을 사용하고 있습니다.정상적으로 작동하지만 오랜만에 애플리케이션을 사용하면 "연결 재설정" 오류가 발생합니다.논리적 연결이 Tomcat 데이터 소스에서 닫히기 전에 Oracle 서버에서 물리적 연결이 닫혔기 때문에 이 오류가 발생합니다.그래서 데이터 소스에서 연결을 가져오기 전에 물리적 연결이 닫혀 있으면 false를 제공하는 연결 개체의 isValid(0) 메서드를 사용하여 연결 유효성을 확인하고 있습니다.하지만 풀에서 잘못된 연결 개체를 제거하는 방법을 모르겠습니다.

이는 DB 서버에서 연결이 설정된 시간 이상 지속되지 않도록 허용하는 시간 제한이 있거나 유효하다는 메시지를 수신하지 못하면 종료될 수 있기 때문일 수 있습니다.이 문제를 해결하는 한 가지 방법은 킵얼라이브를 켜는 것입니다.이들은 기본적으로 여전히 유효한 연결이라고 말하며 db 서버에 ping을 전송합니다.

이것은 Tomcats DBCP 구성에 대한 꽤 좋은 링크입니다."dB 연결 풀 누출 방지" 섹션을 살펴봅니다.그것은 시작하기에 좋은 장소인 것 같습니다.

server.xml 파일에서 데이터 소스를 구성하는 동안 검증 쿼리를 사용했습니다.애플리케이션에 제공하기 전에 데이터베이스에서 쿼리를 실행하여 연결의 유효성을 확인합니다.

오라클용

validationQuery="/* select 1 from dual */"

MySql용

validationQuery="/* ping */"

유효하지 않으면 닫고 열어 보십시오.이 방법으로 다시 초기화하면 풀에서 제거하고 재사용할 필요가 없습니다.

Tomcat jdbc 연결 풀에서 잘못된 java.sql.연결을 폐기하려면,

우리는 이것을 프로그램에서 명시적으로 할 수 있습니다.org.apache.tomcat.jdbc.pool로 압축을 풉니다.PooledConnection(풀링된 연결)을 Discarded(true)로 설정하고 JDBC 연결을 마지막으로 닫습니다.기본 연결이 반환되면 Connection Pool에서 해당 연결을 제거합니다.

(ConnectionPool.returnConnection(...)

예: PooledConnection pconn = conn.unwrap(PooledConnection.class); pconn.setDiscarded(true); conn.close();

언급URL : https://stackoverflow.com/questions/6030512/how-to-remove-invalid-database-connection-from-pool

반응형