事务一致性 与异常抛出

来源:互联网 发布:知乎提示浏览器版本低 编辑:程序博客网 时间:2024/05/17 04:52
通常  我们 利用  配置 service层  update,save 等方法名前缀 来达到事务。并将 存储修改  的 代码 放入 service  以  保持 事务的 完整性。
而在 实际 项目中 遇到 如图:

在代码执行 到 bonusService.save 操作时 已经 发生异常 但并未 抛出异常,尽管在 第一幅图第二行 throws exception ,但程序并未停止 ,并依然执行了 白色框中的代码,
导致了 功能错误
究其原因。一般类似空指针,数组越界等异常会被程序捕捉抛出。而对于程序事务中使用了乐观锁 导致 的异常 并未被程序 抛出 。
于是总结, 在service 中只 放 与事务 有关 的代码。 与事务 无关的 代码 放置于 controllor中。(注:在修改中首先将白色区域代码独立出来构造一个父方法。发现,在 service中 若子方法事务,而父方法不事务并调用子方法。则 程序将会 把 父子方法 同事务处理。即 结果 依然 会执行 白色区域代码)