본문 바로가기
Web Development/Spring Boot

[Spring Boot / JPA / Error] Connection leak detected: there are 1 unclosed connections upon shutting down pool

by 감자맹고우 2022. 1. 17.
728x90
반응형

JPA로 실습 프로젝트를 진행하는 도중 다음과 같은 오류가 발생했다.

 

ERROR: Connection leak detected: there are 1 unclosed connections upon shutting down pool jdbc:h2:tcp://localhost/~/test

 

'연결 누수가 감지되었다 : pool 종료 시에 닫히지 않은 1개의 연결이 있다' 는 뜻이라서, 'connection이 필요한 부분이 있나?' 라는 생각이 먼저 떠올랐다.

 

그렇기에 유일하게 connection이 필요한 db connection을 생각하게 되었다.

문제는 db는 H2로 먼저 띄워서 동작하는 것을 확인했다는 것이다.

 

반응형

 

[해결 방법]

 

결국은 코드에서 db와 커넥션 하는 부분이 잘못되었다는 것을 알게 되어서, 처음에는 persistence.xml의 db url이 제대로 작성되어있는지 확인했다. 문제 없었다.

 

EntityManagerFactory와 EntityManager, EntityTransaction이 모두 잘 close되고 있는가?

 

문제가 있었다!

바로 Transaction이 커밋되지 않았다는 것이다.

 

EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();

tx.begin();

try{
    <!-- 이 부분이 주석 처리된 상태였다 -->
    tx.commit();
} catch (Exception e) {
    tx.rollback();
} finally {
    em.close();
}

emf.close();

 

쓸모 없는 코드를 주석 처리하면서 트랜젝션이 커밋되는 부분을 같이 주석 처리하여 발생한 에러였다.

 

JPA는 트랜젝션 내에서 DB 변경 작업이 이루어진다.

작업 후에는 트랜젝션을 종료해주어야 하는데 이 부분에서 실수가 있었다.

 

기본적인 실수를 되짚어 볼 수 있었던 고마운 에러였다.

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글