摘要:如果代碼出現異常調用對象的將事務回滾。否則,如果方法正常返回,事務將被提交。
調用webservice接口,數據不回滾問題
使用cxf+spring框架開發webservice接口,在開發一個具有保存數據的接口功能時,如果數據發生了異常,對service層無論使用了xml配置聲明式事務管理還是使用了使用@Transactional注解聲明式事務管理,數據均不會回滾;在debug代碼和查詢相關資料后,個人覺得數據不會回滾的原因:調用webservice接口時,發生的異常并沒有在service被spring捕獲到,而是直接拋出給調用接口的客戶端,所以就沒有回滾。這時候就需要在拋出異常的地方手動回滾事務。
手動回滾事務原理
org.springframework.transaction.support.TransactionTemplate:可以在service層方法中添加事務,Spring為我們提供了一種方法就是使用TransactionTemplate類;我們要為TransactionTemplate裝配一個TransactionManager,調用TransactionTemplate實例的execute()方法將執行包含在TransactionCallback實例里的代碼。如果代碼出現異常,調用TransactionStatus對象的setRollbackOnly()將事務回滾。否則,如果doInTransaction()方法 正常返回,事務將被提交。
手動回滾事務相關代碼實現
xml文件配置
java代碼
/* * 注入聲明式事物模板 */ @Resource private JdbcDbDAO pubjdbcDAO; @Resource private TransactionTemplate transactionTemplate; public String SavePhysicianOrder(final String zyid,final String yzsllx,final String DATA_BUSINESS) { // TODO Auto-generated method stub //開始事務,如果出現狀況則回滾 String execute = transactionTemplate.execute(new TransactionCallback() { String jsonStr="";//返回值 @Override public String doInTransaction(TransactionStatus ts) { try { // 使用JdbcTemplate進行持久化層操作 String delSQL="DELETE FROM ZYGL_YZMXB";//封裝好的JdbcTemplate int exeRnt=pubjdbcDAO.execSQL(delSQL);//封裝J好的dbcTemplate if(exeRnt <= 0){ jsonStr="操作失敗!!"; }else{ jsonStr="操作成功!!"; } } catch (Exception e) { ts.setRollbackOnly(); jsonStr="數據發生異常,異常信息:"+e.getLocalizedMessage(); return jsonStr; } // 如果成功,事務被提交 return jsonStr; } }); return execute; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66386.html
摘要:解決注解不回滾檢查你方法是不是的。之后新加入的注解,原來返回需要和配合。和為異步注解,放到方法上,表示調用該方法的線程與此方法異步執行,需要配合注解使用。是中的標注,是為了控制返回的字符串顯示哪些字段。 @SpringBootApplication = (默認屬性)@Configuration + @EnableAutoConfiguration + @ComponentScan。 @...
摘要:前言如題,今天介紹的聲明式事務。提供一個注解在配置類上來開啟聲明式事務的支持。而在配置里還開啟了對聲明式事務的支持,代碼如下所以在中,無須顯式開啟使用注解。源碼下載后語以上為聲明式事務的教程。 微信公眾號:一個優秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 的 聲明式事務。 Spring 的事務機制 所有的數據訪問技術都有事務處...
摘要:聲明式事務管理的事務管理是通過代理實現的。其中的事務通知由元數據目前基于或注解驅動。代理對象與事務元數據結合產生了一個代理,它使用一個實現品配合,在方法調用前后實施事務。 JDBC事務 1.獲取連接 Connection con=DriverManager.getConnection(); 2.開啟事務 con.setAutoCommit(true/fase); 3.執行CRUD 4....
閱讀 2935·2021-10-18 13:33
閱讀 846·2019-08-30 14:20
閱讀 2629·2019-08-30 13:14
閱讀 2518·2019-08-29 18:38
閱讀 2887·2019-08-29 16:44
閱讀 1211·2019-08-29 15:23
閱讀 3482·2019-08-29 13:28
閱讀 1915·2019-08-28 18:00