2023년 9월 15일 금요일

Connection Pool에 있는 Connection의 autocommit=false설정 후 반환할 때

ChatGPT를 사용해서 얻은 결론을 요약하였습니다.

트랜잭션 처리를 하기 위해 connection의 autocommit=false를 해야 할 때가 있습니다.

Connection Pool에 있는 connection의 autocommit 상태는 해당 connection을 가져올 때 설정 된 상태를 유지합니다. 즉 Connection Pool에서 connection을 가져올 때 connection의 autocommit 상태를 설정하고, 그 상태를 유지합니다.

그래서 connection을 반환하기 전에 다시 원래 상태로 복원하지 않으면, 해당 connection을 재사용하는 다른 부분에서 예기치 않은 동작이 발생할 수 있습니다.

autocommit 설정을 원래 상태로 복원해야 하는 시점은 'connection.close()' 메서드를 호출하기 전에 해야합니다. autocommit 설정을 'connection.close()' 메서드 호출 이후에 변경하면 해당 커넥션은 이미 닫혔으므로 설정을 변경할 수 없습니다.

다시말해 connection을 사용한 후 데이터베이스 작업을 완료하고 'connection.close()'를 호출하기 전에 autocommit 설정을 원래 상태로 복원해야 합니다. 이렇게 하면 connection을 닫을 때 설정이 제대로 복원되어 다음 사용자에게 영향을 미치지 않게 됩니다.

connection.setAutoCommit(false);

//데이터베이스 작업
//...

connection.commit();
connection.setAutoCommit(true);
connection.close();

댓글 없음:

댓글 쓰기

스프링 빈 등록 순서 오류 시 @PostConstruct 사용

  스프링 xml 설정에서 등록할 빈을 명시적으로 지정한 것과 <context:component-scan>와 혼용해서 사용한  경우 빈등록 순서 오류가 발생 할 수도 있습니다. 여러가지 방법이 있지만, 그 중에서 @PostConstruct ...