Spring @Transactional RollbackFor不起作用 [英] Spring @Transactional rollbackFor not working

查看:926
本文介绍了Spring @Transactional RollbackFor不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有类似下面的代码

   public abstract class AffltTransactionService implements IAffltTransactionService {
    ....

        @Override
        @Transactional
        public void processTransactions(List<? extends AffltTransaction> transactions) {
            for (AffltTransaction transaction : transactions) {
                if (transaction != null) {
                    processTransaction(transaction);
                }
            }
        }

        private void processTransaction(AffltTransaction transaction) {
            try {
                processTransactionInternal(transaction);

            } catch (Exception exception) {
                affltTransactionError = new AffltTransactionError(null, null, "error", new Date());
                saveAffltTransactionError(affltTransactionError);
                log.error(exception.getLocalizedMessage());
            }
        }

        @Transactional(readOnly=false, rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
        public void processTransactionInternal(AffltTransaction transaction) {

processTransactionInternal引发ServiceUnAvailableException,该异常扩展了RuntimeException

processTransactionInternal throws ServiceUnAvailableException which extends RuntimeException

但是,尽管具有rollbackFor = Exception.class,但事务并未回滚. 你能帮忙吗?

But the transaction is not getting rolled back despite having rollbackFor = Exception.class . Can you please help.

推荐答案

@Transactional注释将无效,因为Spring在带注释的类之上创建代理,并且实现了方面定义的功能通过代理.因此,当您从类中调用该方法时,它不会通过代理进行访问,因此不会创建和/或回滚事务.

@Transactional annotation won't have any effect if you are calling the method directly, since Spring creates proxies above annotated classes and the aspect-defined functionality is implemented by proxy. So, when you call the method from within your class it doesn't get through proxy, and hence no transcation is created and/or rolled back.

看看春季参考以获取详细说明.

这篇关于Spring @Transactional RollbackFor不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆