SSM架构下@Transactional事务无效 日志信息:Closing non transactional SqlSession

点此查看全部文字教程、视频教程、源代码

1. 背景

基于SSM架构的项目,在服务层方法添加了@Transactional注解,applicationContext开启了注解:

	<!-- 事物管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	    <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 事务注解驱动,标注@Transactional的类和方法将具有事务性 -->  
	<tx:annotation-driven transaction-manager="transactionManager" />  

案例说在服务层添加了@Transactional注解的方法应该具备事务的原子性,结果无效,查看日志发现有:

Closing non transactional SqlSession

这个也提示事务没有起作用。

2. 原因

幸好有SVN,发现之前做了一个修改,就是把对服务层的扫描配置从applicationContext.xml移到了spring-mvc.xml。

<!--该配置原来在applicationContext.xml 作用是自动扫描com.easy.service包下的类 并作为bean加载到容器-->
<context:component-scan base-package="com.easy.service" />

将这句配置移回applicationContext.xml,事务果然生效。

3. 分析

仔细想了下,SSM架构下,Spring是一个容器,通过applicationContext.xml配置,SpringMVC算子容器,通过spring-mvc.xml配置。

子容器可以访问父容器中的bean,但是父容器不能访问子容器的bean,就跟继承关系似的。

所以父容器中定义的事务管理bean就不知道子容器中扫描的com.easy.service包下的类情况了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值