Spring事务中这10大常见陷阱,每个都可能导致严重问题!
- 内容介绍
- 文章标签
- 相关推荐
本文共计1758个文字,预计阅读时间需要8分钟。
对于从事Java开发的同行来说,Spring的事务管理确实再熟悉不过了。在某些业务场景下,如果同时有多个表需要写入操作,为确保操作的原子性(要么同时成功,要么同时失败),避免数据不一致,必须谨慎处理。
对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。在某些业务场景下,如果同时有多张表的写入操作,为了保证操作的原子性(要么同时成功,要么同时失败)避免数据不一致的情况,我们一般都会使用spring事务。
没错,spring事务大多数情况下,可以满足我们的业务需求。但是今天我要告诉大家的是,它有很多坑,稍不注意事务就会失效。
不信,我们一起看看。
1.错误的访问权限
@Servicepublic class UserService {
@Autowired
private UserMapper userMapper;
@Transactional
private void add(UserModel userModel){
userMapper.insertUser(userModel);
}
}
我们可以看到add方法的访问权限被定义成了private,这样会导致事务失效,spring要求被代理方法必须是public的。
AbstractFallbackTransactionAttributeSource类的computeTransactionAttribute方法中有个判断,如果目标方法不是public,则TransactionAttribute返回null,即不支持事务。
本文共计1758个文字,预计阅读时间需要8分钟。
对于从事Java开发的同行来说,Spring的事务管理确实再熟悉不过了。在某些业务场景下,如果同时有多个表需要写入操作,为确保操作的原子性(要么同时成功,要么同时失败),避免数据不一致,必须谨慎处理。
对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。在某些业务场景下,如果同时有多张表的写入操作,为了保证操作的原子性(要么同时成功,要么同时失败)避免数据不一致的情况,我们一般都会使用spring事务。
没错,spring事务大多数情况下,可以满足我们的业务需求。但是今天我要告诉大家的是,它有很多坑,稍不注意事务就会失效。
不信,我们一起看看。
1.错误的访问权限
@Servicepublic class UserService {
@Autowired
private UserMapper userMapper;
@Transactional
private void add(UserModel userModel){
userMapper.insertUser(userModel);
}
}
我们可以看到add方法的访问权限被定义成了private,这样会导致事务失效,spring要求被代理方法必须是public的。
AbstractFallbackTransactionAttributeSource类的computeTransactionAttribute方法中有个判断,如果目标方法不是public,则TransactionAttribute返回null,即不支持事务。

