public void accountTransfer(String fromId, String toId, int money) {
txTemplate.executeWithoutResult((status)->{
try{
Member fromMember = memberRepository.findById(fromId);
Member toMember = memberRepository.findById(toId);
memberRepository.update(fromId, fromMember.getMoney() - money);
validation(toMember);
memberRepository.update(toId, toMember.getMoney() + money);
} catch (SQLException e) {
throw new RuntimeException(e);
}
});
}
스프링에서 코드 중복을 막기위해 템플릿 콜백 패턴을 적용한 TransactionTemplate
을 제공한다.
코드의 중복을 줄였지만 아직도 핵심로직과 트랜잭션 부가기능이 코드에 섞여 있다.
트랜잭션 AOP로 문제를 해결하자.