Sonar指出的问题是非事务性方法
我正在努力解决声纳问题:
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....());
}
clean
调用事务性execute
。因此,execute
上的@Transactional
注释被忽略,并且该方法将不会在事务模式下执行。
您必须用@Transactional
对clean
方法或整个类进行注释
此外,类本身必须使用例如@Service
或@Copmonent
注册为Springbean,否则将不会为此类创建代理包装bean。
阅读更多信息:Spring-@Transactional-后台发生了什么?