선언적 트랜잭션 (정전 두 전송 모의 경우)

이는 정전 시뮬레이션 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) 추가 특수

 이이 문제를 해결할 수

출시 구 개 원래 기사 · 원 찬양 36 ·은 40000 +를 볼

추천

출처blog.csdn.net/qq_38235017/article/details/104536287