작성
·
420
0
스프링 DB 접근 기술 > 스프링 통합 테스트 수업을 듣던 도중 MemberServiceIntegrationTest.java 파일에서 회원가입() Test를 진행하던 도중 'java.sql.SQLException: Connection is closed'이라는 에러가 발생하는 상황입니다. 질문 게시판에서 확인해보니 현재 미해결된 상황이라 이렇게 다시금 글을 남깁니다.
구글링하여 확인해보니 @Transactional과 Connection객체의 트랜잭션 중복 문제인것 같은데... 어떻게 수정해야 할지 감이 안잡혀서 질문남깁니다.
하단에 공유 링크 첨부합니다.
확인해주시면 감사하겠습니다.
Google Drive Link
https://drive.google.com/file/d/1KBANfw1MXw3anPnnlIQgHzs5kolswUsd/view?usp=sharing
구글에 검색해보니 connection 객체의 AutoCommit을 false로 설정하거나, TransactionSynchronizationManager.initSynchronization() 함수를 사용하여 트랜잭션을 동기화하여 처리하는 방식으로 사용하면 될것이다 라는 의견들이 있었습니다. initSynchronization()함수를 사용하니 'Cannot activate transaction synchronization - already active'이런 식의 에러가 발생하고 AutoCommit을 false로 설정하니 변함없이 Connection is closed라고 표시되더군요. 어떠한 방식을 사용해서 진행해야 에러를 잡을 수 있을지 궁금합니다.
로그를 찍어보니 JdbcMemberRepository.java의 pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 이부분에서 에러가 발생하는 것 같은데... try catch로 감싸게 된다면 어떠한 Exception으로 감싸면 되는지도 궁금합니다.(IllegalStateException으로 감싸면 될까요...?)
말씀하신대로 처리하니 정상적으로 작동됩니다! 답변 감사드립니다!!