资讯专栏INFORMATION COLUMN

调用webservice接口,数据不回滚问题

yzzz / 1892人阅读

摘要:如果代码出现异常调用对象的将事务回滚。否则,如果方法正常返回,事务将被提交。

调用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

相关文章

  • springboot注解总结

    摘要:解决注解不回滚检查你方法是不是的。之后新加入的注解,原来返回需要和配合。和为异步注解,放到方法上,表示调用该方法的线程与此方法异步执行,需要配合注解使用。是中的标注,是为了控制返回的字符串显示哪些字段。 @SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。 @...

    happyfish 评论0 收藏0
  • SpringBoot 实战 (十) | 声明式事务

    摘要:前言如题,今天介绍的声明式事务。提供一个注解在配置类上来开启声明式事务的支持。而在配置里还开启了对声明式事务的支持,代码如下所以在中,无须显式开启使用注解。源码下载后语以上为声明式事务的教程。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 如题,今天介绍 SpringBoot 的 声明式事务。 Spring 的事务机制 所有的数据访问技术都有事务处...

    ygyooo 评论0 收藏0
  • spring事务处理

    摘要:声明式事务管理的事务管理是通过代理实现的。其中的事务通知由元数据目前基于或注解驱动。代理对象与事务元数据结合产生了一个代理,它使用一个实现品配合,在方法调用前后实施事务。 JDBC事务 1.获取连接 Connection con=DriverManager.getConnection(); 2.开启事务 con.setAutoCommit(true/fase); 3.执行CRUD 4....

    李文鹏 评论0 收藏0

发表评论

0条评论

yzzz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<