声纳问题-交易

时间:2020-07-24 12:51:34

标签: java spring spring-transactions

我正在为声纳问题而苦苦挣扎 squid:S2229“方法不应调用具有不兼容的“ @Transactional”值的同类方法 “ 我不确定该如何解决。我应该在清洁方法之上添加@Transactional还是其他方法?甚至删除@Transactional注释。

@Override
    public void clean(BooleanSupplier isInterrupted) {
        ...

        while (shouldContinue(isInterrupted) && partitionsIterator.hasNext()) {
            PartitionDeleteSql partition = partitionsIterator.next();

            execute(partition);
        }
    }

    @Transactional
    public void execute(PartitionDeleteSql sql) {
        ...
        getJdbcTemplate().execute(sql....());
        getJdbcTemplate().execute(sql....());
        getJdbcTemplate().execute(sql....());
    }

1 个答案:

答案 0 :(得分:1)

Sonar指出的问题是非事务方法clean调用事务性execute。因此,@Transactional上的execute注释将被忽略,并且该方法将不会在事务模式下执行。

您必须使用clean注释@Transactional方法或整个类。

另外,必须使用例如@Service@Copmonent将类本身注册为Spring bean,否则将不会为此类创建代理包装器bean。

更多信息,请访问:Spring - @Transactional - What happens in background?