• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

커넥션 종료

22.07.10 14:09 작성 조회수 245

0

4분50초 쯤에 con.close 호출돼서 커넥션 종료하는건 의미상 알겠는데 close가 직접적으로 명시된 코드를 찾으려고 했는데 안보이더라구요 이게 혹시 정확히 어디에 있는지 알 수 있을까요? 

답변 2

·

답변을 작성해보세요.

2

Seunghoon Choi님의 프로필

Seunghoon Choi

2022.11.21

안녕하세요. DataSourceTransactionManager 기준으로 doCleanupAfterCompletion() 메서드에서 진행하고 있네요.

@Override
protected void doCleanupAfterCompletion(Object transaction) {
	DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction;

	// Remove the connection holder from the thread, if exposed.
	if (txObject.isNewConnectionHolder()) {
		TransactionSynchronizationManager.unbindResource(obtainDataSource());
	}

	// Reset connection.
	Connection con = txObject.getConnectionHolder().getConnection();
	try {
		if (txObject.isMustRestoreAutoCommit()) {
			con.setAutoCommit(true);
		}
		DataSourceUtils.resetConnectionAfterTransaction(
				con, txObject.getPreviousIsolationLevel(), txObject.isReadOnly());
	}
	catch (Throwable ex) {
		logger.debug("Could not reset JDBC Connection after transaction", ex);
	}

	if (txObject.isNewConnectionHolder()) {
		if (logger.isDebugEnabled()) {
			logger.debug("Releasing JDBC Connection [" + con + "] after transaction");
		}
		DataSourceUtils.releaseConnection(con, this.dataSource);
	}

	txObject.getConnectionHolder().clear();
}
  1. 트랜잭션 동기화 매니저 정리

  2. 수동 커밋 → 자동 커밋 원복

  3. 커넥션 닫기

AbstractPlatformTransactionManager 추상 클래스 processCommit(), processRollback() 메서드에서 마지막으로 각 구현체의 doCleanupAfterCompletion() 메서드를 호출하는 구조인 것 같습니다.

alrnr3521님의 프로필

alrnr3521

질문자

2022.11.23

그렇군요 ㅎㅎ 찾아주셔서 감사합니다!

2

안녕하세요. alrnr3521님

트랜잭션이 커밋되거나 롤백되는 곳 안에서 이런 것들이 발생합니다.

감사합니다.