spring事务和异步注解@Transactional 和 @Async注意事项

 

 

@Transactional的使用

使用方法

1.使用接口或者接口方法上,AOP必须是jdk动态代理(不推荐)

2.可以使用到类或者类方法上(推荐)

3.注解应该只应放在public方法上,其他级别(protected,private无效)

4.只有来自外部的方法调用,事务才会生效。

①(生效)

@Transactional
public void A(){
    B();
}

public void B(){
    ...
}

②(不生效)

public void A(){
    B();
}

@Transactional
public void B(){
    ...
}

③(生效)

@Transactional
public void A(){
    B();
}
@Transactional
public void B(){
    ...
}

④(生效)

@Transactional
public void A(){
    dao.B();
}

@component
public void B(){
    ...
}

回滚控制

1.默认配置下,方法体只有在抛出RuntimeException或其子类时,才回滚事务。

2.可以指定哪些异常回滚:

@Transactional(rollbackFor=XXXException.class)

2.可以指定哪些异常不回滚:

@Transactional(noRollbackFor=XXXException.class)

 @Async的使用

@Async使用与@transactional类似

注意:如下方式会使@Async失效
一、异步方法使用static修饰
二、异步类没有使用@Component注解(或其他注解)导致spring无法扫描到异步类
三、异步方法不能与异步方法在同一个类中
四、类中需要使用@Autowired或@Resource等注解自动注入,不能自己手动new对象
五、如果使用SpringBoot框架必须在启动类中增加@EnableAsync注解
六、在Async 方法上标注@Transactional是没用的。 在Async 方法调用的方法上标注@Transactional 有效。
七、调用被@Async标记的方法的调用者不能和被调用的方法在同一类中不然不会起作用!!!!!!!
八、使用@Async时要求是不能有返回值的不然会报错的 因为异步要求是不关心结果的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值