인프런 커뮤니티 질문&답변
커넥션 종료
작성
·
491
0
4분50초 쯤에 con.close 호출돼서 커넥션 종료하는건 의미상 알겠는데 close가 직접적으로 명시된 코드를 찾으려고 했는데 안보이더라구요 이게 혹시 정확히 어디에 있는지 알 수 있을까요?
퀴즈
애플리케이션 계층 구조에서 서비스 계층을 순수하게 유지하려는 가장 중요한 이유는 무엇일까요?
UI 변경에 쉽게 대응하려고
데이터 저장 기술 변경에 쉽게 대응하려고
핵심 비즈니스 로직을 기술 종속 없이 관리하려고
성능 최적화를 위해
답변 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();
}트랜잭션 동기화 매니저 정리
수동 커밋 → 자동 커밋 원복
커넥션 닫기
AbstractPlatformTransactionManager 추상 클래스 processCommit(), processRollback() 메서드에서 마지막으로 각 구현체의 doCleanupAfterCompletion() 메서드를 호출하는 구조인 것 같습니다.
2






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