作者: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、分布式缓存、数据结构等等。