最近,在项目中遇到这样一个问题,就是在一个方法里有做DB 保存操作和发送EMS,因为commit动作是在方法全部跑完后执行的(Spring的原因吧?),所以要是db 保存成功,接着发送EMS,也成功,最后在做commit时,DB down了,这时,信息发送出去了,但DB没更新,这就有问题了,如果我想保持这两个动作:DB,EMS在同一个“事务”中(这里叫事务就是想保持两个动作的一致),有没什么办法呢?谢谢!

解决方案 »

  1.   

    1:抛出异常
    2:向上建构
    3:条理清晰
    ---------------
    在DAO逻辑上exe--不进行事务封装。service Class:
    @Transactional
    {
    DB--SAVE
    EMS
    }
      

  2.   

    拆写成两个方法。
    先去处理数据库操作
    执行成功后再做EMS处理。你的数据库操作和ems又不是同步的,再者事务只针对数据库操作。
    只能成功一个再处理另一个。
      

  3.   

    谢谢各位的回复,只是:2楼,我知道事务是针对数据库操作的,所以在事务上加引号,如果一个个去实现就没意义了,有没什么现成的方案解决这样的让DB操作和EMS发送保持统一操作的呢?谢谢!