请问:最后的代码,异常都捕获了,为何会触发回滚?
23:12:47.590 [main] DEBUG seckill.dao.SeckillDao.reduceNumber - ==> Preparing: UPDATE seckill SET productnumber = productnumber - 1 WHERE seckill_id = ? AND start_time <= ? AND end_time >= ? AND productnumber > 0
23:12:47.594 [main] DEBUG seckill.dao.SeckillDao.reduceNumber - ==> Parameters: 1000(Long), 2016-08-06 23:12:47.585(Timestamp), 2016-08-06 23:12:47.585(Timestamp)
23:12:47.636 [main] DEBUG seckill.dao.SeckillDao.reduceNumber - <== Updates: 1
日志中显示update: 1,这个对应update操作被回滚了,但是回滚没有日志输出,直接报出异常就没有日志了。显然回滚的日志不是被logback控制显示的。
你好,谢谢回答,可是我就是触发的重复秒杀这个异常,被捕获了,但是那个update操作被回滚了哦。求解答
最后的代码 只是 捕捉了 秒杀重复 和 秒杀关闭这两个异常,如果还有别的异常就抛出来,并且抛出的异常是已经被转化为 “运行时异常” 而 spring 是对 “运行时异常”敏感的(监控),这个时候就触发它的事物机制(前提是这个方法被事务管理)