问答详情
源自:4-1 使用集成测试Service逻辑

请问:最后的代码,异常都捕获了,为何会触发回滚?

请问:最后的代码,异常都捕获了,为何会触发回滚?

提问者:再见来不及握手 2016-06-07 16:30

个回答

  • taoy
    2016-08-06 23:19:57

    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控制显示的。

  • 再见来不及握手
    2016-06-08 12:00:00

    你好,谢谢回答,可是我就是触发的重复秒杀这个异常,被捕获了,但是那个update操作被回滚了哦。求解答

  • 血手人屠
    2016-06-07 20:22:01

    最后的代码 只是 捕捉了 秒杀重复  和 秒杀关闭这两个异常,如果还有别的异常就抛出来,并且抛出的异常是已经被转化为 “运行时异常”  而 spring 是对  “运行时异常”敏感的(监控),这个时候就触发它的事物机制(前提是这个方法被事务管理)