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

今日头条搜索三线城市程序员老陈观看视频教程,或者聊聊技术与人生,非常欢迎吭。

背景

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

	
    
	    
    
      
	  

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

Closing non transactional SqlSession

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

原因

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



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

分析

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

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

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

你可能感兴趣的:(Java----SSM)