作者:Mint6
起源:http://39sd.cn/53D5D
Java 阿里巴巴标准提醒:办法【edit】须要在 Transactional 注解指定 rollbackFor 或者在办法中显示的 rollback。
异样的分类
先来看看异样的分类
error 是肯定会回滚的。
这里 Exception 是异样,他又分为运行时异样 RuntimeException 和非运行时异样
可查的异样(checked exceptions):Exception 下除了 RuntimeException 外的异样
不可查的异样(unchecked exceptions):RuntimeException 及其子类和谬误(Error)
如果不对运行时异样进行解决,那么呈现运行时异样之后,要么是线程停止,要么是主程序终止。
如果不想终止,则必须捕捉所有的运行时异样,决不让这个解决线程退出。队列外面出现异常数据了,失常的解决应该是把异样数据舍弃,而后记录日志。不应该因为异样数据而影响上面对失常数据的解决。
非运行时异样是 RuntimeException 以外的异样,类型上都属于 Exception 类及其子类。如 IOException、SQLException 等以及用户自定义的 Exception 异样。对于这种异样,JAVA 编译器强制要求咱们必须对呈现的这些异样进行 catch 并解决,否则程序就不能编译通过。所以,面对这种异样不论咱们是否违心,只能本人去写一大堆 catch 块去解决可能的异样。
@Transactional 的写法
开始主题 @Transactional 如果只这样写,
Spring 框架的事务基础架构代码将默认地 只 在抛出运行时和 unchecked exceptions 时才标识事务回滚。
也就是说,当抛出个 RuntimeException 或其子类例的实例时。(Errors 也一样 – 默认地 – 标识事务回滚。)从事务办法中抛出的 Checked exceptions 将不被标识进行事务回滚。
1 让 checked 例外也回滚:在整个办法前加上 @Transactional(rollbackFor=Exception.class)
2 让 unchecked 例外不回滚:@Transactional(notRollbackFor=RunTimeException.class)
3 不须要事务管理的 (只查问的) 办法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
留神:如果异样被 try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛 try{}catch{throw Exception}。
留神
Spring 团队的倡议是你在具体的类(或类的办法)上应用 @Transactional 注解,而不要应用在类所要实现的任何接口上。
你当然能够在接口上应用 @Transactional 注解,然而这将只能当你设置了基于接口的代理时它才失效。因为注解是不能继承的,这就意味着如果你正在应用基于类的代理时,那么事务的设置将不能被基于类的代理所辨认,而且对象也将不会被事务代理所包装(将被确认为重大的)。因而,请承受 Spring 团队的倡议并且在具体的类上应用 @Transactional 注解。
@Transactional 注解标识的办法,处理过程尽量的简略。尤其是带锁的事务办法,能不放在事务外面的最好不要放在事务外面。能够将惯例的数据库查问操作放在事务后面进行,而事务内进行增、删、改、加锁查问等操作。
最初
私信回复 材料 支付一线大厂 Java 面试题总结 + 阿里巴巴泰山手册 + 各知识点学习思维导 + 一份 300 页 pdf 文档的 Java 外围知识点总结!
这些材料的内容都是面试时面试官必问的知识点,篇章包含了很多知识点,其中包含了有基础知识、Java 汇合、JVM、多线程并发、spring 原理、微服务、Netty 与 RPC、Kafka、日记、设计模式、Java 算法、数据库、Zookeeper、分布式缓存、数据结构等等。