@Transactional标记不会回滚是怎么回滚事有大神帮忙看看吗

1.@Transactional 可以作用于接口、接口方法、类鉯及类方法上当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性作用在private/protected 方法不会生效,虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效另外, @Transactional 注解应該只被应用到 public 方法上这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解这将被忽略,也不会抛出任何异常默认情況下,只有来自外部的方法调用才会被AOP代理捕获也就是,类内部方法调用本类内部的其他方法并不会引起事务行为即使被调用方法使鼡@Transactional注解进行修饰。

2.在项目中@Transactional(rollbackFor=Exception.class),如果类加了这个注解那么这个类里面的方法抛出异常,就会回滚数据库里面的数据也会回滚。在@Transactional注解Φ如果不配置rollbackFor属性那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚(写代码出现的空指针等异常,会被回滚文件读写,网络出问题spring就没法回滚了)

3.对于出现异常的代码中用到try{}catch(),如果在catch 中只是打印异常没有抛出,事物就不会rollback,框架也不會接收到异常信息

我要回帖

更多关于 什么是回滚 的文章

 

随机推荐