有没有办法在使用声明式事务管理捕获异常后回滚事务。我有这段代码。
@Component
@Transactional(rollbackFor = EvictionException.class)
Public class Eviction{
@Autowired
private Alerter alerter;
@Scheduled(cron = "${evictor.cron.expression}")
public void evictObjectFromDatabase(){
try{
....
DO SOME DELETION QUERIES
}catch(Exception ex){
alerter.produceAlert("Failed to delete entries from database");
}
}
}
如果在删除时产生异常,我需要发出另一个团队监视swing UI的警报。此外,我需要回滚事务,但使用rollBackFor = Exception.class不起作用。
答案 0 :(得分:1)
您需要使用@Transactional(rollbackFor = Exception.class)
注释您的方法,并在catch块中抛出异常(以便事务代理可以检测异常并因此回滚)例如。
try{
....
DO SOME DELETION QUERIES
}catch(Exception ex){
alerter.produceAlert("Failed to delete entries from database");
throw ex;// this is important
}
答案 1 :(得分:0)
@Ambuj Jauhari 如果您查看@transactional 的文档,则会因错误或运行时异常而发生回滚。在您没有为异常 .class 提供回滚时,最有可能发生回滚,因为抛出的异常是运行时异常而不是任何已检查异常。如果抛出的异常类型是任何已检查异常,那么如果您没有为 exception.class 属性提供回滚,就不会发生回滚