p3c 关于规约TransactionMustHaveRollbackRule

vptzau2j  于 2个月前  发布在  其他
关注(0)|答案(4)|浏览(41)

规约原文

方法【%s】需要在Transactional注解指定rollbackFor或者在方法中显式的rollback

问题描述

https://github.com/alibaba/p3c/blob/master/p3c-pmd/src/main/resources/rulesets/java/ali-exception.xml
Positive example 2:

/**
     * @author caikang
     * @date 2017/04/07
     */
    @Service
    public class UserServiceImpl implements UserService {
        @Override
        @Transactional(rollbackFor = Exception.class)
        public void save(User user) {
            //some code
            //db operation
        }
    }

以上例子中,save方法并不会产生Checked Exception,没必要加rollbackFor吧?

修改建议

当方法抛出Checked Exception时再触发

ao218c7q

ao218c7q3#

@gujin520
不太了解你们Spring
如果这时候我扔出一个OutOfMemoryError,会被rollbackFor拦截吗?
应该不会吧?
所以是不是Exception.class得改成Throwable.class比较合适?

pcrecxhr

pcrecxhr4#

根据Spring的@transactional文档,Error类型也会被捕获。

By default, a transaction will be rolling back on RuntimeException and Error but not on checked exceptions (business exceptions).
@gujin520 不太了解你们Spring 如果这时候我扔出一个OutOfMemoryError,会被rollbackFor拦截吗? 应该不会吧? 所以是不是Exception.class得改成Throwable.class比较合适?

相关问题