트랜잭션 프록시 코드 예시
public class TransactionProxy {
private MemberService target;
public void logic() {
//트랜잭션 시작
TransactionStatus status = transactionManager.getTransaction(..);
try {
//실제 대상 호출
target.logic();
transactionManager.commit(status); //성공시 커밋
} catch (Exception e) {
transactionManager.rollback(status); //실패시 롤백
throw new IllegalStateException(e);
}
}
}
AOP를 적용한 코드
@Transactional
public void accountTransfer(String fromId, String toId, int money) throws SQLException {
bizLogic(fromId, toId, money);
}
Transactional 어노테이션을 통해서 스프링이 제공하는 트랜잭션 AOP를 사용
선언적 트랜잭션 관리
@Transaction 애노테이션 하나만 선언해서 매우 편리하게 트랜잭션을 적용하는 것
해당 로직에 트랜잭션을 적용하겠다 하고 어딘가에 선언하기만 하면 트랜잭션이 적용됨.
프로그래밍 방식 트랜잭션 관리
트랜잭션 매니저 또는 트랜잭션 템플릿 등을 사용해서 트랜잭션 관련 코드를 직접 작성하는 방식
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
spring.datasource.password=