在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。 在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚...
1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class) 2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class) 3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED) 注意: 如果异常被try{}catch{}了,事务就不回滚了,如...
DefaultTransactionAttribute.java中rollbackOn,是否支持事务回滚的默认判断方式:是否是运行期异常或是是否是错误类型(与Transactional注解中的rollbackFor属性说明相对应). publicbooleanrollbackOn(Throwable ex) {return(exinstanceofRuntimeException || exinstanceofError); } RollbackRuleAttribute中如何进行的赋值问题,...
但是发现不少项目中只加了@Transactional注解,并没有rollbackFor = Exception.class这个属性,那么不加这个属性,有些异常,事务管理器是不会对此异常做回滚操作的。 先定结论,再做验证:当只加@Transactional注解时,那么业务代码抛RuntimeException和Error时,事务管理器会识别到这类异常来进行回滚,但是非RuntimeException的...
public boolean rollbackOn(Throwable ex) { return (ex instanceof RuntimeException || ex instanceof Error); } RollbackRuleAttribute中如何进行的赋值问题,具体来讲是项目启动之后会扫描带有Transactional注解的方法,然后将注解中标注的属性获取之后进行参数配置.具体体现是在:SpringTransactionAnnotationParser.java中pa...
下面来看看Transactional的rollbackFor参数在源码里面定义,原因解释的比较清楚了。 /*** Defines zero (0) or more exception {@link Class classes}, which must be* subclasses of {@link Throwable}, indicating which exception types must cause* a transaction rollback.* By default, a transaction will be...
这种情况可以用@Transactional(rollbackFor = Exception.class)处理或者再catch里手动执行回滚 4.默认情况...
@Transactional(rollbackFor = Exception.class) public void addUser(UserParam param) { User user = PtcBeanUtils.copy(param, User.class); userDAO.insert(user); if (!CollectionUtils.isEmpty(param.getRoleIds())) { userRoleService.addUserRole(user.getId(), param.getRoleIds()); ...
编程式处理方式,是我们自己通过TransactionManager的commit和rollback来实现。声明式处理方式是我们比较常用的一种,可以在xml中配置,或者通过@Transactional注解方式来使用。 事务实现原理: 事务处理模块本质是通过AOP来实现的。在配置xml的时候,我们会配置TransactionProxyFactoryBean,接下来看下相关的一些类: TransactionProxy...
在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。 **这种设置是因为Spring的默认回滚RuntimeException, 如果想要回滚Exception时,要设置@Transactional(rollbackFor = Exception.class),而且Exception还要抛出。**...