###Spring事务的传播行为
当方法存在事务,然后调用其他方法的时候事务是怎么传播的,spring提供了七种传播行为,每次看过几天后就忘记了,这一次进行整理记录一下,不然每次寻找资料很麻烦。
Spring有七大传播行为如下图所示,光看以下描述可能不是很好理解,遇见自己无法理解的东西最好的办法就是自己通过代码去实践探索。
####REQUIRED
spring中默认的传播行为,如果拥有事务的A方法调用拥有事务的B方法,B方法将会在A方法的事务中运行,如果A方法没有事务,将会运行在B方法的事务中。下面将以用户购买商品进行事务的探索:
/**
*两个entity类
*/
public class People { //用户类
@Id
Integer id;
int price; //拥有的钱财
}
public class Product { //物品类
@Id
Integer id; //id
int price; //价格
int count; //库存
}
/**
*数据库表
*/
create table product(
id BIGINT PRIMARY KEY,
price int,
count int
)
create table people(
id BIGINT PRIMARY KEY,
price int unsigned //加上unsigned代表price的值必须大于等于0
)
数据库中的数据 people表
product表
下面是service中购买商品的代码
@Service
public class ProductServiceImpl implements ProductService {
@Autowired
ProductMapper productMapper;
@Autowired
PeopleMapper peopleMapper;
@Override
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public void buyOne(Integer productId) {
System.out.println(TransactionSynchronizationManager.getCurrentTransactionName