手工开启事务注意保证commit或rollback及避免长事务【附代码】

今天爱分享给大家带来手工开启事务注意保证commit或rollback及避免长事务【附代码】,希望能够帮助到大家。
用事务时,确保commit或rollback执行。避免由于代码问题,commit或rollback未执行,连接未正常归还连接池,导致服务整体挂掉。(生产我知道的有两次)。错误代码示例:


ITransactionManager txManager = getTransactionManager();
txManager.begin();
try{
   insert(String orderNo, Limit limit);
   // 问题一:有可能外部服务不稳定,导致长事务
   callRemoteService(orderNo);
   int res = updateOrder(orderNo);
   // 问题二:有可能事务未提交
   if(res > 0)
      txManager.commit();
}catch(Exception e){
   txManager.rollback();
   logger.error(e.getMessage(), e);
}



正确代码:


 callRemoteService(orderNo);
 ITransactionManager txManager = getTransactionManager();
 txManager.begin();
 try{
    insert(String orderNo, Limit limit);
    updateOrder(orderNo);
    txManager.commit();
 }catch(Exception e){
    txManager.rollback();
    logger.error(e.getMessage(), e);
 }



人已赞赏
数据库

逐笔处理优化为批量处理 针对数据库、redis等减少网络交互,提升性能【附代码】

2020-12-23 14:35:51

数据库

Error: Unable to find a match: mysql-community-server【解决方法】

2020-12-23 14:48:25

'); })();