이는 정전 시뮬레이션 AccountServiceImpl.java 가정, 즉 전사 정전 현상 가정
AccountServiceImpl.java
package com.gem.service;
import com.gem.mapper.AccountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Calendar;
@Service
//表示该类中所有的方法具有声明式事务(设置声明式事务的传播)
@Transactional(propagation = Propagation.REQUIRED)
public class AccountServiceImpl implements AccountService {
@Autowired
AccountMapper accountMapper;
@Override
public void transfer(String fromAccountNo, String toAccountNo, Double money) {
//转出账户减出转账金额
accountMapper.updateAccount(fromAccountNo,money);
//出现异常情况...
doSomeBadThings();
//转入账户加上转账金额
accountMapper.updateAccount(toAccountNo,-money);
}
/**
* 模拟异常
*/
private void doSomeBadThings(){
Calendar calendar=Calendar.getInstance();
int second=calendar.get(Calendar.SECOND);
if(second<30){
throw new RuntimeException("服务器断电...");
}
}
}
0-30 전사의 범위가 정상이 그 다음에 스톱워치 30-60 전송 권리 범위이다 (통상 전송이 좌우 비정상 전사이다)
그런 다음이 문제를 해결할 수 선언적 트랜잭션을 사용
(1) applicationContext.xml에서 처음으로 열린 문 트랜잭션
(2) 다음 트랜잭션 관리자를 구성
AccountServiceImpl.java (3) 추가 특수
이이 문제를 해결할 수