강의

멘토링

커뮤니티

Inflearn Community Q&A

alrnr35212376's profile image
alrnr35212376

asked

Spring DB Part 1 - Core Principles of Data Access

Transaction Problem Solving - Transaction Manager 2

커넥션 종료

Written on

·

472

0

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

spring

Answer 2

3

안녕하세요. 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
Questioner

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

2

yh님의 프로필 이미지
yh
Instructor

안녕하세요. alrnr3521님

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

감사합니다.

alrnr35212376's profile image
alrnr35212376

asked

Ask a question