应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

Spring事务

  使用Spring事务
  Spring事务介绍
  Spring事务的特点:
  1。多种事务API,Spring事务都可兼容;
  2。程序接入简单;
  3。与已有的Spring框架集成。
  支持的事务API如下:
  Spring事务使用代码如下:TransactionalOverridepublicvoidtestTransactional(Integerid){demoDao。remove(id);}
  此为Service实现类中的一个实现方法
  Spring事务引入
  那么Spring中使用事务,我们要做的是:
  对要使用事务的类或者方法,添加注解Transactional。支持事务元数据设置,比如传播特性,回滚设置等,通过AOP将设置生效。
  增加配置:EnableTransactionManagement,来开启Spring中注解驱动的事务管理能力。SpringBoot中默认开启,不需要加该注解。
  一般是在Service层添加事务,然后其他层或者其他Service类来调用该事务类。
  TransactionAPI:JDBC
  一直使用的JDBCDriver来连接数据库。
  开启Spring事务之前,先看事务作用于什么?是对于数据库层来说。
  那么程序与数据库层发起一次事务如何来实现呢?首先来看Java程序与数据库的交互,是通过JDBC(Javadatabaseconnectivity)来展开。JDBC是API形式,定义了客户端如何访问数据库。
  JDBCAPI的实现则有JDBCDriverManager。在pom文件中,有引入过此Jar包。使用过程中,有一个连接池,来管理可用的JDBCconnection。那么程序就可通过JDBCDriver来发起事务,其中事务与一个JDBCconnection相关联。
  事务的过程实现代码类似于:importjava。sql。Connection;ConnectionconnectiondataSource。getConnection();(1)try(connection){connection。setAutoCommit(false);(2)executesomeSQLstatements。。。connection。commit();(3)}catch(SQLExceptione){connection。rollback();(4)}
  可以看到事务的过程为,获取数据库连接,取消自动提交,执行SQL逻辑,然后控制正常提交,异常回滚。
  Spring事务默认设置
  默认的事务能力是:传播机制是REQUIRED,即当前无事务时新建一个事务,当前存在事务,则加入该事务中。隔离级别是DEFAULT,即使用数据库默认的隔离级别,那么数据库层默认的隔离级别是REPEATABLEREAD(可重复读)。transactionisreadwrite。服务于传播机制,相对应的readonly来表明只做只读操作。默认超时时间,跟随底层事务服务提供方,如果不支持超时逻辑则没有。我们使用的默认超时时间是50s。回滚机制适用于RuntimeException。checkedException不会触发。Spring事务实现
  Transactional实现逻辑
  Spring事务是对多种TransactionAPI的封装,那么基于JDBC实现的封装后,通过增加Transactional注解来实现,简化了用户的使用流程。
  分析事务过程中,每次变化的是执行SQL的逻辑部分。分析如下:
  Spring提供Proxy层来实现,开启事务和关闭事务,中间过程再调用业务逻辑,即,RealUserService的userDao。save()部分。为什么说是Real?
  在Spring中我们要对某个类或者方法添加事务时,可以直接在其上添加注解Transactional。
  Spring内部的实现,则是依赖IoC和AOP特性。
  对含有Transactional注解的类或者方法,提供一层Proxy实现。通过AOP实现了关联。
  对于含有Transactional的bean,IoC容器会对该bean初始化一个代理类,也就是上面的UserServiceProxy。该proxy内部对实际的service调用,实现其业务逻辑。使用时因为IoC特性,调用相应的proxy类而不是实际service,对内部的代理逻辑我们无感知。
  那么从程序侧,实现了对事务的开启和关闭的封装,而事务与数据库连接相关联,此处Spring对数据库连接则封装在TransactionManager中,常用的功能类是PlatformTransactionManager。此处的调用逻辑如下图:
  ReactiveTransactionManager是响应式功能类
  Spring事务手动控制
  在一些场景下,不可用注解Transactional来控制事务,需要引入手动控制逻辑时,Spring提供了封装类TransactionTemplate。也是对PlatformTransactionManager的封装,简化使用流程,类似于RedisTemplate等等。ServicepublicclassUserService{AutowiredprivateTransactionTemplatetemplate;publicLongregisterUser(Useruser){Longidtemplate。execute(status{executesomeSQLthate。g。insertstheuserintothedbandreturnstheautogeneratedidreturnid;});}}
  不必自己打开或者关闭数据库连接,并且Spring会将SQLExceptions转换为RuntimeException。Spring事务封装类
  Spring事务实现类
  类结构如图:
  AOP执行类:TransactionAspectSupport,内部是调用TransactionManager来实现事务逻辑。
  Spring对事务的封装逻辑,通过类PlatformTransactionManager,将指定DataSource的JDBCConnection绑定到当前线程。
  当使用DataSource。getConnection()时,并不是Spring封装支持的形式,可以定义TransactionAwareDataSourceProxy代理目标DataSource,在DAO层中使用该proxy类,可实现Spring的事务管理。
  LazyConnectionDataSourceProxy该代理类也实现了Spring的事务管理,它的优势是当要执行语句时,才从目标数据源获取连接。
  Spring事务的不同封装层级
  通过Spring封装对数据库的访问,我们可以正确创建、重用和清理持久性API资源(比如JDBC,Hibernate或JPA等),完成DataSourceTransactionManager到JDBCDataSource或者HibernateTransactionManager到HibernateSessionFactory的事务链接到相关资源,实现Spring管理的事务。
  Spring提供了不同封装层级的数据访问操作类,使用其会支持Spring事务。如下图:
  Spring事务不生效原因基于上面的逻辑,梳理出常见的事务不生效的原因有:默认设置下,开启事务的方法必须是public。类内部自调用,AOP代理不生效。初始化时不生效,比如在PostConstruct中。依赖IoC逻辑将proxy完全初始化以提供能力。抛出的异常是否是RuntimeException。SpringBoot项目中使用多数据源切换时,TransactionManager类中加载的是否是当前数据源。Spring项目中,使用低层级的数据源访问方式时,检查数据源封装是否是Spring事务支持的代理类。

孕期吃水果要注意的事情有哪些?首先,孕妇吃水果对胎儿有很多好处,比如:可以预防胎儿神经管缺陷或其他畸形、还含有维生素C和维生素E以及微量元素锌、碘等,可以促进胎儿的大脑发育等。孕期多吃水果对孕妇本身也有好处……爱因斯坦相对论钟慢效应,速度越快,时间越慢?你相信吗?如果你用光速飞行一年回到地球,也许地球上已经经过了几千年!牛顿认为,宇宙是由运动的物质组成,不管是掉落的苹果或者宇宙中运行的天体,都是因为受到引力的作用。……得知孩子被打,两位爸爸微信约架,几天后俩孩子倒给他们上了一课文秘籍君各位家长,孩子初开学,你们最担心的是什么?不少家长担心孩子融入不了学校,也有的家长担心孩子交不到朋友,但更多家长会担心,自己的孩子会在学校受欺负被打。……宇宙为什么这么寒冷?地球上最冷的地方在哪里?什么是绝对零度?宇宙虚空是一个寒冷而孤寂的地方,据估测宇宙微波背景辐射的温度仅为2。7开尔文即零下270。45摄氏度,是宇宙中最冷的地方,但即使是这样也不是绝对零度,即所有物质都会停止运动的理……给两会留言十岁女孩初潮,别让食物毁掉下一代晚上的时候,朋友带孩子过来做客。话题聊到了老婆今天去开家长会带来的内容:儿子的同学,十岁的女孩,来月经了。老婆说,家长会上的时候,就引起了家长们的议论,家长们比较担忧。老……太便宜了广州南沙花园酒店好给自己放个假,想在家门口度假?油价飙升,不想开车,搭地铁都可以说走就走,那么,南沙就是zui佳选择。小编推荐观山阅海,避开喧闹的五星海边邮轮城堡酒店广州南沙花园酒店老广……对接粤东西北优化产业分工广州制造业企业的现代化车间(资料图片)广州日报全媒体记者李波摄制造业当家,无疑是今年广东省两会的热词之一。2023年省政府工作报告指出,以实体经济为本、坚持制造业当家,加……麦积山大景区推出多项门票优惠引客来车窗外的春天旅游主题推广活游客参观麦积山石窟兰州晚报讯3月3日,由甘肃省文化和旅游厅组织的我和四季有个约会车窗外的春天旅游主题推广考察团走进天水市麦积山大景区,10余家旅行社分别签订引客入甘肃游天……章泽天变得低调许多,一声不响去看秀时装周进行到了最后阶段,好像也看出了一些时代的变化。第一次去看时装周的偶像们有拼命生长的劲儿,而时装周的老人们都低调了许多。章泽天她也来了巴黎时装周,但……外地人来福州,除了老福州,就没别的吃了吗?慢慢吃慢慢逛福州这座山海之间的宝藏省会既有古城风雅,又兼有滨海浪漫实在是招人喜欢你看刚过去的春节假期接待游客近300万人次,何其震撼熙……122。英国加拿大联合出品爱情战争题材电影巴黎烟云影片巴黎烟云制片国家英国加拿大导演约翰。杜根主演查理兹。塞隆佩内洛普。克鲁兹类型剧情爱情战争上映时间20041933年英国剑桥大学,美丽女孩……用AI技术守护老年听力健康,腾讯天籁行动公布四大最新举措智东西作者ZeR0编辑漠影智东西3月5日报道,在3月3日全国爱耳日,腾讯天籁行动公布了助力老年听障解决的四大最新进展及关键举措:1)发布国内首个集成听力筛查、……
德约科维奇麻烦了!纳达尔提前锁定法网冠军?名将他太强大了12月27日,29岁的阿根廷网球名将、现世界排名第13的好手施瓦茨曼在接受采访时提到了他眼中的纳达尔和费德勒,在他看来,红土场上的纳达尔几乎是不可战胜的,而且对对手施压的精神压……沈梦辰预热婚礼说领证没有仪式感?杜海涛大概率带她跳槽芒果竞品八卦手册近日,沈梦辰在综艺《中国婚礼》在线还原自己的领证现场!匆匆忙忙签字,匆匆忙忙拍照,匆匆忙忙结束和自己想象中充满仪式感的领证现场完全不同!沈梦辰这是要给自己婚礼预热……葡萄牙阿尔加维那些天涯海角的事机缘这件事总是很奇妙。不曾想到,会在第一次到达的陌生国度葡萄牙住下来已经两年多。中南部的阿连特茹(Alentejo)大区,满眼是望不见尽头的田野起伏,这里有着世界最大面积的栓皮……故地重游?天空体育铁锤帮提出正式报价欲免签林皇据天空体育报道,林加德有望以自由球员的身份重返西汉姆联,他已经收到了球队开出的正式报价。在上一季英超结束之后,林加德没有与曼联续约,即将恢复自由身。天空体育表示,西汉姆联……第一次饮酒,初相见里的桃夭你说,你想喝酒了原因无他只是因为期末考试考砸了我说,好办于是拉着你一起去了离学校不远处的小酒馆名字为初相见我们调侃着这略带俗气和矫情的名字……被导演娶走的10位女星,个个沉鱼落雁,闭月羞花,导演赚了赚了在娱乐圈中,女演员和导演在拍戏的过程中产生感情是再正常不过的事,而不少女星在年纪大了之后,也会选择嫁给导演,一个拍,一个演,是不少人心中的才子佳人。而导演的审美自然也是不……天热不妨多吃这八道菜,荤素搭配开胃下饭香,炒一炒5分钟能出锅进入六月后,天气实在是太热了,人的食欲开始下降,家人的胃口也变得很差,但是不吃饭,人也没有精神和体力去学习和工作,因此要注意及时补充营养。夏天太热没胃口,试试这几道菜,荤素搭配……在乌克兰100元能享受哪些服务?当地人说出实情,男游客心动了100元人民币在乌克兰能享受哪些服务?(此处已添加小程序,请到今日头条客户端查看)乌克兰美女说出实情后,中国小伙心动不已。这几年,越来越多国民开始体验出国旅游的乐趣……这座天文台最大的望远镜,带你走进天文学先辈们的世界在加利福尼亚州南部,有一座名叫帕洛玛的山。1936年,在这座山上,那里的人们亲眼目睹了伟大的工程师和工人们利用500多吨钢材和玻璃打造了举世瞩目的帕洛玛天文台上的海耳望远……第396堂好课凯文凯利成为创造者他是硅谷著名的预言家,也常被看作是网络文化的发言人和观察者。他曾经创下一个词预测未来100年的盛举,著作被无数互联网大佬奉为互联网商业圣经。他就是凯文凯利(Kevi……惠威MT1Mini蓝牙音箱体验有能力刷爆社交平台的家居好物现如今,谁家还没个蓝牙音箱啊,特别这两年大家宅家时间增加,在家娱乐需求多起来了,怎么着也会入手个蓝牙音箱,让美妙的声音充满整个空间,为心灵带来一些快乐和慰藉。只是无论已经入手与……提醒生活中常见的这五个野菜,或要少吃,建议别再当成宝从古至今人们更喜欢吃一些野味,比如飞禽走兽的肉或者是田地里植物的根茎,大多数人都认为这种食物富含营养价值丰富,要比平常的蔬菜与肉食口味更好尤其是在春夏季节,漫山遍野的农田……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网