声纳问题-交易



我正在努力解决声纳问题:

squid:S2229"方法不应调用具有不兼容"的同一类方法@交易性的";值";

我不知道该如何解决这个问题。我应该在clean方法或其他方法上添加@Transactional吗?甚至删除@Transactional注释。

@Override
public void clean(BooleanSupplier isInterrupted) {
// other code
while (shouldContinue(isInterrupted) && partitionsIterator.hasNext()) {
PartitionDeleteSql partition = partitionsIterator.next();
execute(partition);
}
}
@Transactional
public void execute(PartitionDeleteSql sql) {
// other code
getJdbcTemplate().execute(sql....());
getJdbcTemplate().execute(sql....());
getJdbcTemplate().execute(sql....());
}
Sonar指出的问题是非事务性方法clean调用事务性execute。因此,execute上的@Transactional注释被忽略,并且该方法将不会在事务模式下执行。

您必须用@Transactionalclean方法或整个类进行注释

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

阅读更多信息:Spring-@Transactional-后台发生了什么?

最新更新