本节视频老师说,不适当使用try-catch会造成spring以为不是运行时异常,从而不执行事务操作,那如何写try-catch,可以保证spring以为抛出的异常是运行时异常,从而执行回滚??
SeckillExecution 继承RuntimeException。seckillCloseException ,RepeatKillException 继承SeckillExecution 这样保证所有出现的异常都被视为 运行期异常
catch (SeckillCloseException e1){ throw e1; } catch (RepeatKillException e2){ throw e2; } catch (Exception e){ // 其它异常 logger.error(e.getMessage(),e); // 所有编译期异常转化为运行期异常 throw new SeckillException("seckill inner exception"+e.getMessage()); return new SeckillExecution(seckillId,SecKillStateEnum.INNER_ERROR); }
意思是有了异常你要继续往上抛。不能自已默默catch处
看最终service方法最终是否抛出了运行时异常吧,如果在方法中抛出了运行时异常又catch了的话,spring就检测不到,不会回滚