繁体   English   中英

捕获异常后事务回滚

[英]Transaction RollBack after catching exception

在使用声明式事务管理捕获异常后,有什么方法可以回滚事务。 我有这段代码。

@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 不起作用。

您需要使用@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
}

@Ambuj Jauhari 如果您查看@transactional 的文档,则回滚会因错误或运行时异常而发生。在您没有为异常 .class 提供回滚时,最有可能发生回滚,因为抛出的异常属于运行时异常而不是任何检查异常。如果抛出的异常类型是任何检查异常,那么如果您没有为 exception.class 属性提供回滚,就不会发生回滚

使用 SqlTransaction 和 RollBack

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM