摘要:如果代码出现异常调用对象的将事务回滚。否则,如果方法正常返回,事务将被提交。
调用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; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66386.html
摘要:解决注解不回滚检查你方法是不是的。之后新加入的注解,原来返回需要和配合。和为异步注解,放到方法上,表示调用该方法的线程与此方法异步执行,需要配合注解使用。是中的标注,是为了控制返回的字符串显示哪些字段。 @SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。 @...
摘要:前言如题,今天介绍的声明式事务。提供一个注解在配置类上来开启声明式事务的支持。而在配置里还开启了对声明式事务的支持,代码如下所以在中,无须显式开启使用注解。源码下载后语以上为声明式事务的教程。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 如题,今天介绍 SpringBoot 的 声明式事务。 Spring 的事务机制 所有的数据访问技术都有事务处...
摘要:声明式事务管理的事务管理是通过代理实现的。其中的事务通知由元数据目前基于或注解驱动。代理对象与事务元数据结合产生了一个代理,它使用一个实现品配合,在方法调用前后实施事务。 JDBC事务 1.获取连接 Connection con=DriverManager.getConnection(); 2.开启事务 con.setAutoCommit(true/fase); 3.执行CRUD 4....
阅读 2776·2021-10-18 13:33
阅读 827·2019-08-30 14:20
阅读 2601·2019-08-30 13:14
阅读 2437·2019-08-29 18:38
阅读 2856·2019-08-29 16:44
阅读 1181·2019-08-29 15:23
阅读 3414·2019-08-29 13:28
阅读 1888·2019-08-28 18:00