• 欢迎访问极客公园网站,WordPress信息,WordPress教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入极客公园 QQ群
  • Git主题现已支持滚动公告栏功能,兼容其他浏览器,看到的就是咯,在后台最新消息那里用li标签添加即可。
  • 最新版Git主题已支持说说碎语功能,可像添加文章一样直接添加说说,新建说说页面即可,最后重新保存固定连接,演示地址
  • 百度口碑求点赞啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊http://koubei.baidu.com/s/gitcafe.net
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏极客公园吧

ssm整合,事务,aop,事务传播为什么失效???

模板工具 站点默认 5年前 (2022-01-20) 1428次浏览 0个评论

背景

好久没写博客了,今天小写一篇博客,简单写一遍ssm整合,其实之前已经写过了,在layui快速开发这篇博客里,这次主要写出原理以及细节,和一些demo

这里主要说下spring配置mybatis,以及配置ssm的原理步骤。

整合ssm

网上很多人觉得很复杂,其实我觉得还是很好记忆的。

具体的配置代码,看下这篇博客,ssm整合

其实,配置ssm整合无非就是配置spring,springmvc,mybatis

从web.xml里面配置spring和springmvc,即一个spring的上下文和一个前端控制器。

mybatis的整合则是在spring的配置文件中整合,主要就是配置一个sql工厂,这个sql工厂需要一个datasource数据源,以及一些其他的mybatis的信息,例如配置文件,和mapper.xml文件的位置等待。

这些配置完,整合就结束了!

spring事务

事务简介

首先需要理解什么是事务,为什么需要事务

事务的定义就是,一组操作,组成这些操作的一个个单元。要么全部成功,要么全部失败。

为什么需要事务?比如,一个业务中,需要的不只是一组sql操作。例如转账中,需要给一个账号增加余额以及对应的账号减少余额,并且这两个sql操作是不可分割的,因此需要一个事务将其绑定起来。

spring事务

什么是spring中的事务?mysql是支持事务的,原始的jdbc中如何使用呢?

原始中,我们是start开启一个事务,然后进行sql操作,如果发生了意外,则roll回滚,如果没啥问题就commit提交事务。但是这样的写法直接耦合死了。例如,这个业务的事务我都不想要了,那么你就需要一段段去删除。例如给这个业务中的方法全部加上业务,你又要一段段去增加。因此,spring看出来了我们的难处。spring大手一拍,我来帮你管理吧。

spirng中的事务则是基于aop原理,帮你管理。你只需要进行配置就行了。这里重点说下注解配置,因为注解比较简单。使用

注解,加在哪写方法上,就可以代表这整个方法是一个事务。

事务注解一般都是加在业务层,加在业务的接口上表示整个业务层的方法开启了事务。

事务传播

事务传播的七种,其实最常用的就两种,REQURED和REQUREDS_NEW,通俗的讲,直接看注释把,这里就不说了。最后的测试结果,开启了REQURED的时候,要么全部成功,要么全部失败,REQUREDS_NEW的时候,则是按transate里面的方法看作原子。

spring事务传播为什么失效了?

这里简简单单几段代码,我却找了很久的bug,那就是spring的传播失效,具体来说是REQUREDS_NEW失效了,这里先说原因

原因

我这里的transact的方法没有交给spring进行管理

思考

说实话我应该冷静分析下,没变肯定是默认的事务传播,如果配置了开启事务还是不行,那就是方法没注入,没给spring管理,我应该冷静下来,思路清晰点

总结

private 和 调用同类的方法 是最常见的两种事务失效的情况。不仅仅是调用自身的类,如果是private方法也会失效


极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ssm整合,事务,aop,事务传播为什么失效???
喜欢 (2)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址