Spring事务中的事务传播行为使用方式详解
1. REQUIRED 传播行为
REQUIRED是Spring事务管理的默认传播行为。如果当前没有事务,则新的事务将被开启;如果当前存在事务,则方法将参与到当前事务中。下面是REQUIRED传播行为的使用方式:
@Service
@Transactional
public class UserServiceImpl implements UserService{
@Autowired
private UserDao userDao;
@Override
public void updateUser(User user) {
// 具体业务逻辑
}
@Override
@Transactional(propagation = Propagation.REQUIRED)
public void transferMoney(int fromUserId, int toUserId, double amount) {
User fromUser = userDao.getUserById(fromUserId);
User toUser = userDao.getUserById(toUserId);
double fromUserBalance = fromUser.getBalance();
if(fromUserBalance < amount){
throw new RuntimeException("余额不足");
}
fromUser.setBalance(fromUserBalance - amount);
toUser.setBalance(toUser.getBalance() + amount);
userDao.updateUser(fromUser);
userDao.updateUser(toUser);
}
}2. REQUIRES_NEW 传播行为
REQUIRES_NEW表示当前方法必须开启新的事务,并挂起当前事务(如果存在)。下面是REQUIRES_NEW传播行为的使用方式:
@Service
@Transactional
public class OrderServiceImpl implements OrderService{
@Autowired
private OrderDao orderDao;
@Override
public void createOrder(Order order) {
// 具体业务逻辑
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateOrderStatus(int orderId, int status) {
Order order = orderDao.getOrderById(orderId);
order.setStatus(status);
orderDao.updateOrder(order);
}
}3. SUPPORTS 传播行为
SUPPORTS表示当前方法支持参与到一个已经存在的事务中,如果当前没有事务,则以非事务方式执行。下面是SUPPORTS传播行为的使用方式:
@Service
@Transactional
public class LogServiceImpl implements LogService{
@Autowired
private LogDao logDao;
@Override
public void addLog(Log log) {
// 具体业务逻辑
}
@Override
@Transactional(propagation = Propagation.SUPPORTS)
public void deleteLog(int logId) {
logDao.deleteLog(logId);
}
}4. NOT_SUPPORTED 传播行为
NOT_SUPPORTED表示当前方法以非事务方式执行,如果当前存在事务,则挂起该事务。下面是NOT_SUPPORTED传播行为的使用方式:
@Service
@Transactional
public class ProductService{
@Autowired
private ProductDao productDao;
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void updateProductStock(int productId, int quantity){
// 具体业务逻辑
}
}5. NEVER 传播行为
NEVER表示当前方法以非事务方式执行,如果当前存在事务,则抛出异常。下面是NEVER传播行为的使用方式:
@Service
@Transactional
public class OrderServiceImpl implements OrderService{
@Autowired
private OrderDao orderDao;
@Override
public void createOrder(Order order) {
// 具体业务逻辑
}
@Override
@Transactional(propagation = Propagation.NEVER)
public void deleteOrder(int orderId) {
Order order = orderDao.getOrderById(orderId);
orderDao.deleteOrder(order);
}
}Spring事务管理中的事务传播行为对于设计和管理复杂的事务场景非常重要。本文详细介绍了几种常用的事务传播行为,并提供了相应的代码示例。开发者可以根据实际需求选择合适的事务传播行为,从而实现事务的管理与控制。
通过对Spring事务中事务传播行为的深入理解,开发者可以更好地设计和管理事务,提高应用程序的可靠性和稳定性。在实际开发中,根据业务需求合理选择事务传播行为,可以避免事务覆盖和事务的不一致等问题,并且提升系统的性能和并发能力。
以上就是Spring事务中的事务传播行为使用方式详解的详细内容,更多关于Spring事务传播行为的资料请关注脚本之家其它相关文章!
相关文章
sonar-scanner连接sonarquebe7的sonar.java.binaries问题的解决方案
今天小编就为大家分享一篇关于sonar-scanner连接sonarquebe7的sonar.java.binaries问题的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-12-12
Mybatis Plus使用XML编写动态sql的超简易方法
这篇文章主要介绍了Mybatis Plus使用XML编写动态sql的超简易方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01
java.util.Date与java.sql.Date的区别
这篇文章主要介绍了java.util.Date与java.sql.Date的区别的相关资料,需要的朋友可以参考下2015-07-07
Mybatis之类型处理器TypeHandler的作用与自定义方式
这篇文章主要介绍了Mybatis之类型处理器TypeHandler的作用与自定义方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-04-04
Java中四种访问控制权限解析(private、default、protected、public)
java当中有4种访问修饰限定符privat、default(默认访问权限),protected以及public,本文就详细的介绍一下这四种方法的具体使用,感兴趣的可以了解一下2023-05-05


最新评论