[spring] 트랜잭션 처리 주의사항
by mini_min[spring] 트랜잭션 처리 주의사항
✔️ 트랜잭션 처리
1) 트랜잭션 처리를 위한 AOP 등록하기 (마이바티스 -CONTEXT 쪽 짜세요)
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution(public * com.sp.app..*Controller.*(..))"
id="controllerOperation"/>
</aop:config>
2) DataSourceTransactionManager
: JDBC 기반 트랜잭션 관리자다.
: JDBC, 마이바티스 등 JDBC 기반 라이브러리로 데이터베이스에 접근하는 경우 이용한다.
: 커밋, 롤백 등의 메소들 사용해 트랜잭션을 관리한다. DataSourceTransactionManager 을 직접 사용하는 경우 코드에서 커밋, 롤백 처리를 해야한다.
2-1) TransactionTemplate
: 트랜잭션과 관련된 작업(커밋, 트랜잭션 시작, 롤백 등)을 처리해주는 템플릿 클래스이다.
: 프로그램에서 직접 트랜잭션을 관리하고자 할 때 사용한다.
: 코드에서 TransactionTemplate.execute() 등의 메소드를 이용해 트랜잭션을 처리한다.
2-2) 선언적 방법을 통한 트랜잭션 처리
: 트랜잭션 템플릿과 달리 트랜잭션 처리를 코드에서 직접 하지 않고 설정 파일이나 애노테이션을 이용해 범위, 롤백 등을 정의한다.
방법 : <tx:advice> 태그 이용해 처리 / @Transactional 애노테이션을 이용한 트랜잭션 설정
<!-- 트랜잭션관리자 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 트랜잭션과 관련된 작업(트랜잭션시작, 커및, 롤백등) -->
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager" />
</bean>
<!-- 선언적 방법으로 트랜잭션 처리 : XML 또는 @Transactional 애노테이션으로 트랜잭션 처리 -->
<!-- 트랜잭션을 위한 advice 작업 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" rollback-for="Exception"/>
<tx:method name="update*" rollback-for="Exception"/>
<tx:method name="delete*" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<!-- AOP 적용 -->
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution(public * com.sp.app..*Service.*(..))"
id="serviceOperation"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"
id="transactionAdvisor"/>
</aop:config>
3) 트랜잭션을 처리해야 하는 작업은 하나의 try{~} catch(){} 블럭에서 코딩해야한다.
@Override
public void insertDemo(Demo dto) throws Exception {
try {
//트랜잭션을 처리해야 하는 작업은 하나의 try{~} catch(){} 블럭에서 코딩해야함
dao.insertData("ts1.insertDemo1", dto);
dao.insertData("ts1.insertDemo2", dto);
dao.insertData("ts1.insertDemo3", dto);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
'Spring' 카테고리의 다른 글
[spring] 최근 본 게시글 보기 (0) | 2022.11.29 |
---|---|
[spring] 파일 처리 / 사진파일 업로드 / 사진 여러개 올리기 (0) | 2022.11.26 |
[spring] WebSocket 웹 소켓 실시간 채팅 (0) | 2022.11.22 |
[spring] 공지사항 게시판 주요 기능 (파일처리 등) (1) | 2022.11.21 |
[Mybatis] Mybatis 개념, 내용 공부 (0) | 2022.11.19 |
블로그의 정보
개발자 미니민의 개발로그
mini_min