Java基础之《@Transactional注解需注意事项》

@Transactional注解默认值
String value() default "";
Propagation propagation() default Propagation.REQUIRED;
Isolation isolation() default Isolation.DEFAULT;
int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;
boolean readOnly() default false;

只读事务是否做无用功?
https://blog.csdn.net/yulin_ganbo/article/details/78566835

注意事项:
1、@Transactional只能被应用到public方法上,对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能
2、如果是本类加了事务的方法,调用本类另一个加了@Transactional标签的方法,事务也不会生效,因为切面是由代理类实现,代理类调用本类方法,是用this.xxx切面切不进去
3、哪些地方需要加事务:
只有查询的方法可以不加事务
只有一句增删改sql的方法,考虑数据库操作后面会不会抛异常,抛异常了要不要回滚
4、要想事务回滚你的异常要么派生自RuntimeException或者Error,或者在注解中用rollbackFor指定

事务的使用
1、A方法上加了@Transactional注解
//没有事务
A();
//没有事务
如果A方法前后都没有事务,那么A方法调用完后,事务就会提交
2、A、B方法上加了@Transactional注解
//没有事务
A();
B();
//没有事务
A方法执行完,事务提交。B方法执行完,事务提交。A和B是各自独立的事务。
3、A、B方法上加了@Transactional注解
//没有事务
A() {
  B();
}
//没有事务
A方法调用B方法,B方法可以加入A方法开启的事务,或者单独新建一个事务(根据事务传递性配置)
4、在一个事务中,要操作多张表时,需要考虑一张表操作成功,另一张表操作失败的情况
如果在外层捕获了异常,事务不会回滚,那么就会造成,一张表有记录,一张表没记录的情况
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值