java事务失效原因及场景

java事务失效原因 java事务不生效的场景

  1. 方法自调用
  2. 方法修饰符为private
  3. 方法是final的
  4. 单独的线程调用
  5. Spring中没加@Configuration注解
  6. 异常被吃掉
  7. 类没有被Spring管理
  8. 数据库没有开启事物

@Transactional
public void a(){
jdbcTemplate.execute(“insert into t1 values(1)”);
throw new RuntimeException();
}

// 自调用
public void b(){
// 由于调用者并不是代理对象,所以切面失败导致事物失效
a();
}

// 此时相当于a方法上面根本就没贴事物注解一样
@Transactional(propagation = Propagation.NEVER)
public void a(){
jdbcTemplate.execute(“insert into t1 values(1)”);
throw new RuntimeException();
}

// 调用方法也加了事物注解,此时会进行回滚,但是是由b方法的事物就行回滚的
@Transactional
public void b(){
// 由于调用者并不是代理对象,所以切面失败导致事物失效
a();
}

public class UserService {
@Autowired // 自己注入自己
private UserService userService;
@Transactional
public void a(){
jdbcTemplate.execute(“insert into t1 values(1)”);
throw new RuntimeException();
}

// 事物生效
public void b(){
    userService.a();
}

}
@EnableAspectJAutoProxy(exposeProxy = true)

public class UserService {
@Transactional
public void a(){
jdbcTemplate.execute(“insert into t1 values(1)”);
throw new RuntimeException();
}

// 事物生效
public void b(){
    // 获取当前类的代理对象
    UserService userService = (UserService) AopContext.currentProxy();
    userService.a();
}

}

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值