spring boot:事务管理:注解@Transactional

 @Transactional可以作用于接口、接口方法、类以及类方法上,Service层和Controller层使用。

import javax.transaction.Transactional;
参 数 名 称 功 能 描 述
readOnly 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true)
rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})
rollbackForClassName 该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:指定单一异常类名称@Transactional(rollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(rollbackForClassName={“RuntimeException”,”Exception”})
noRollbackFor 该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class)指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})
noRollbackForClassName 该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如:指定单一异常类名称:@Transactional(noRollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(noRollbackForClassName={“RuntimeException”,”Exception”})
propagation 该属性用于设置事务的传播行为。例如:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
isolation 该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置
timeout 该属性用于设置事务的超时秒数,默认值为-1表示永不超时

 Service层使用例子:

package com.java1234.service.impl;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import org.springframework.stereotype.Service;

import com.java1234.dao.AccountDao;
import com.java1234.entity.Account;
import com.java1234.service.AccountService;

/**
 * 帐号Service实现类
 * @author Administrator
 *
 */
@Service("accountService")
public class AccountServiceImpl implements AccountService{

	@Resource
	private AccountDao accountDao;
	
	@Transactional
	public void transferAccounts(int fromUser, int toUser, float account) {
		Account fromAccount=accountDao.getOne(fromUser);
		fromAccount.setBalance(fromAccount.getBalance()-account);
		accountDao.save(fromAccount);
		
		Account toAccount=accountDao.getOne(toUser);
		toAccount.setBalance(toAccount.getBalance()+account);
		
        /**异常**/
        int zero=1/0;
        
		accountDao.save(toAccount);
	}

}

猜你喜欢

转载自blog.csdn.net/m0_38084243/article/details/82558785