首页 > 其他分享 >最近学习spring声明式事务小结

最近学习spring声明式事务小结

时间:2023-06-15 11:00:47浏览次数:52  
标签:事务 配置文件 spring REQUIRED prop bean property 小结



在一些需要同时操作几个更新的业务逻辑中,而这几个更新又是互相关联的,也就是说我们希望它成功就一起成功,


失败就一起失败。这样我们就需要使用事务。关于如何配置spring声明式事务就不说了,需要的人可以在网上找下,


肯定会配置一个类似下面的bean

< bean id = " cao "  

 class = " org.springframework.transaction.interceptor.TransactionProxyFactoryBean " >
          < property name = " transactionManager " >
             < ref bean = " transactionManager " />
         </ property >
         < property name = " target " >
             < ref bean = " cao1 " />
         </ property >
         < property name = " transactionAttributes " >
             < props >
                 < prop key = " insert* " > PROPAGATION_REQUIRED </ prop >
                 < prop key = " * " > PROPAGATION_REQUIRED,readOnly </ prop >
             </ props >
         </ property >
     </ bean >


我在程序中使用的是spring的JdbcTemplate

 try  {
 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
               jdbcTemplate.update("insert into NETFAXNO_TBL

(NETFAXNO,AREAID,PHONEAREA,CITYCODE,STATUS,lasttime,bnetid) values

('"+a1+"','"+a2+"','"+a3+"','"+a4+"','"+a5+"',getdate(),'"+a6+"' )");
               
               jdbcTemplate.update("insert into NETFAXNO_TBL

(NETFAXNO,AREAID,PHONEAREA,CITYCODE,STATUS,lasttime,bnetid) values('"+a1+Integer.valueOf("e")

+"','"+a2+"','"+a3+"','"+a4+"','"+a5+"',getdate(),'"+a6+"' )");

            a=true;
            
        } catch (Exception e)  {
            e.printStackTrace();
            }

注意我故意在程序中放了一个会报异常的代码Integer.valueOf("e")

测试结果是没有成功,前一句已经在数据库里了。

后来修改spring的配置文件

<props> 
                 <prop key="insert*"> PROPAGATION_REQUIRED,-Exception</prop> 
                 <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> 
             </props>

测试结果还是没有成功,前一句已经在数据库里了。

所以大家以后在使用的时候就要注意了,正确的方式是在catch中显式抛出你在配置文件声明的异常

将上面的catch修改成为

catch(Exception e){
    e.printStackTrace();
                         throw new Exception("回滚");
    }


这样就可以回滚上面的更新操作了

需要注意的是抛出的异常必须跟配置文件中的异常一致,否则不能回滚,或者经过我测试,也可以

抛出

UnsupportedOperationException

则不需要跟配置文件异常相同,可以正常回滚。

标签:事务,配置文件,spring,REQUIRED,prop,bean,property,小结
From: https://blog.51cto.com/u_16065168/6485415

相关文章

  • 使用Spring Boot和H2完全工作的原型
    我们在Spring中使用了很多H2,特别是用于单元测试。但是,我们可能希望拥有一个包含数据的全功能原型,而不是单元测试。H2是完美的候选者。它适用于Spring,与大多数数据库具有很强的语法兼容性,并提供用于检查数据的UI。想象一下面试任务的情景。您希望您的示例开箱即用,尽可能少的配置为审......
  • Mongodb - org.springframework.dao.DuplicateKeyException
    首先明确场景为mongodb,此异常在进行mongodb的插入操作时抛出,插入的主键已经存在。衍生场景,使用upsert时抛出,此处的包括了$set和$setOnInsert由于upsert非原子操作,如果在多线程环境下:线程A和线程B同时对数据库未存在的记录record1进行upsert,有可能会出现两个线程都判断为应该进行......
  • SpringBoot+druid+dynamic+clickhouse+mysql实现读写分离
    背景:clickhouse+mysql实现读写分离1.配置mysql2.安装clickhouse3.使用可视化工具连接clickhouse4.创建clickhouse的数据库并连接mysql5.SpringBoot+druid+dynamic配置多数据源实现读写分离一.背景由于系统数据量过大,查询条件自定义过多,mysql在查询时响应太慢,所以使用cli......
  • 顶奢好文:3W字,穿透Spring事务原理、源码,至少读10遍
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • springboot启动流程 (1) 流程概览
    本文将通过阅读源码方式分析SpringBoot应用的启动流程,不涉及Spring启动部分(有相应的文章介绍)。本文不会对各个流程做展开分析,后续会有文章介绍详细流程。SpringApplication类应用启动入口使用以下方式启动一个SpringBoot应用:@SpringBootApplicationpublicclassSpringBoo......
  • SpringBoot集成支付宝 - 少走弯路就看这篇
    最近在做一个网站,后端采用了SpringBoot,需要集成支付宝进行线上支付,在这个过程中研究了大量支付宝的集成资料,也走了一些弯路,现在总结出来,相信你读完也能轻松集成支付宝支付。在开始集成支付宝支付之前,我们需要准备一个支付宝商家账户,如果是个人开发者,可以通过注册公司或者让有公......
  • Spring Cloud Alibaba-服务间通信-学习笔记
    目录SpringCloudAlibaba学习笔记简介服务间通信seatrarockermqdubbo的区别具体的使用场景和区别SeataRocketMQDubbo技术选型SpringCloudAlibaba学习笔记简介SpringCloudAlibaba是一个分布式应用架构解决方案,它是基于SpringCloud和阿里巴巴的一些组件构建的。而Sp......
  • springboot+elementUI
    功能简介后端用springboot实现数据库的增删改查,前端用vue中的elementUI编写,实现简单的数据展示和增删改。环境准备1.vue环境vue安装:https://www.cnblogs.com/xiaozhaoboke/p/16888421.html安装好后打开vueui进入项目管理器,创建项目添加elementUI插件和axios插件2......
  • spring中用到哪些设计模式
     1.工厂模式,这个很明显,在各种BeanFactory以及ApplicationContext创建中都用到了;2.模版模式,这个也很明显,在各种BeanFactory以及ApplicationContext实现中也都用到了;3.代理模式,在Aop实现中用到了JDK的动态代理;4.单例模式,这个比如在创建bean的时候。5.Tomcat中有很多场景都使......
  • springboot-feign接口压缩异常
    WARNorg.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver-Resolved[org.springframework.http.converter.HttpMessageNotReadableException:JSONparseerror:Illegalcharacter((CTRL-CHAR,code31)):onlyregularwhitespace(\r,\......