[TransactionalManager 미적용 예시]
public void insertA1WithoutTx() throws Exception {
a1Dao.insert(1, 100); // 성공
a1Dao.insert(1, 200); // 실패
}
1. 각 DAO 메서드 개별 주소를 가짐
conn = com.mysql.cj.jdbc.ConnectionImpl@47e4d9d0 // a1Dao.insert(1, 100);
conn = com.mysql.cj.jdbc.ConnectionImpl@630d1b2f // a1Dao.insert(1, 200);
2. rollback 되지 않고, a1Dao.insert(1, 100); 대상만 데이터 주입
[TransactionalManager 미적용 그림]
DAO의 각 메서드는 개별 Connection
[TransactionalManager 적용 그림]
생성 방법 2가지
// TransactionalManager 객체 생성
PlatformTransactionManager tm = new DataSourceTransactionManager(ds);
// TransactionalManager 속성 정의
TransactionStatus status = tm.getTransaction(new DefaultTransactionDefinition());
root-context.xml 에서 transactionManager 빈 등록
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
root-context.xml 에서 등록
<tx:annotation-driven/>
이미지 출처 : 남궁성 저자의 스프링의 정석