SSM整合后事务不起作用的原因及解决

问题及原因:

SSM整合之后事务不起作用。在刚学习完SSM整合后我意识到了框架的魅力,spring为我们提供了声明式事务管理,但是在整合之后,我发现不起作用了。
在保存账户信息后我故意写了一个错误代码,测试事务是否可以控制,但是结果数据依旧保存进了数据库。
在这里插入图片描述
我试着将事务通知的属性改为任何异常都回滚,但依旧不起作用,因为默认就是任何异常都回滚。
在这里插入图片描述
经过网上查询,发现spring容器是springmvc容器的父容器,并且利用注解配置spring和springmvc的时候。
需要注意:
(1)扫描包spring和springmvc一定要分开扫描自己需要扫的。
(2)spring理应扫描dao和service层的包,而springmvc应该扫描controller层包。
(3)如果springmvc扫描了service和dao层包将操作数据库的对象装入springmvc容器,那么此时项目将不再支持事务控制。

原因:
事务控制是spring提供的,而如果由springmvc容器扫描service和dao层进行创建的数据库操作对象,就不再支持事务控制。

解决:

将springmvc中扫描包的位置base-package精确到conroller:
在这里插入图片描述
需要注意的是:
(1)context:include-filter 标签的意思是先扫描base-package下的内容,另外再加进来 expression 指定的内容。
(2)context:exclude-filter 标签的意思是不扫描 expression 指定的内容。
所以如果不精确到controller,springmvc会将service和dao一起扫描,也就导致了事务不起作用。
我的包结构如下:
在这里插入图片描述

参考:
我是看了这两篇大佬的博客才改对的Bug,有些地方我讲的不是很好,尤其是spring容器和springmvc容器只是带过,大家可以去看第一篇。第二篇则详细讲了两个标签的含义。
(1)ssm整合后事务不起作用的原因及解决
(2)context:include-filter和context:exclude-filter使用时要注意的地方

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值