今天爱分享给大家带来手工开启事务注意保证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);
 }
			    						    						    						    					    		
			    					    				    					    			 原文链接:https://blog.itblood.com/4012.html,转载请注明出处。		    			
		            
![失忆症v0.104 AI版[PC+安卓/17.9G/更新]Amnesia [v0.104 Patreon] [欧美SLG/汉化/动态]](/wp-content/uploads/replace/2025/10/28/2358536f6bb1e6484afd91f829526041.webp)