@Transactional(rollbackFor=Exception.class,readOnly=false) public void generateReport(String year,String month){ widthWatchMapper.deleteBigWidthWatch(year+month); int i=1/0;} 这段代码事务为啥不回回滚
时间: 2024-04-29 19:21:55 浏览: 82
完美解决Spring声明式事务不回滚的问题
这段代码中的事务不会回滚是因为在方法上使用了 `readOnly=false` 的属性,它表示该方法具有写操作,而不是只读操作。在 Spring 中,只有在抛出未捕获的 RuntimeException 或 Error 时,事务才会回滚。在这段代码中,虽然发生了 `1/0` 的异常,但是它被 try-catch 语句块捕获了,因此事务没有被回滚。如果想让事务回滚,则需要让异常抛出去,或者在 try-catch 语句块中手动抛出 RuntimeException 或 Error。同时,也可以将 `readOnly` 属性设置为 true,让该方法成为只读方法,这样即使发生了异常,事务也不会回滚。
阅读全文