ssm事务配置不起作用问题

在搭建ssm项目过程中遇到了,配置的事务不起作用的问题,百度了下,原因大概就是包扫描的问题:spring的配置文件application.xml中包扫描不需要扫描@Controller注解的, 具体如下:

   
        
        
        
    

springMVC配置文件springMVC-servlet.xml中只需要扫描@Controller注解的,具体如下:

    
        
        
    
事务配置我用的是声明式事务配置,在application.xml中配置的,具体如下:

    
    	
    
      
    

用的时候只需要在需要事务管理的类上或方法上加@Transactional就行,当然可以在@Transactional后进行更加详细的配置,此处不是重点,就不讲了。

按道理来说这样配置后就可以了,可是当进行插入时明明有异常却不能回滚,也就是事务根本没有起作用,苦思之后,发现事务配置在了控制层也就是@Controller中,可是有什么关系吗?事务配置在Controller层中难道不可以吗?应该没有规定不能配置在事务中吧,继续百度事务可不可以配置在Controller层中,答案可以,那为什么不起效呢,见鬼了。再仔细看看配置文件,发现了问题:在application.xml文件中我已经排除了扫描@Controller的类,那么再将事务加在@Controller注解的类上,事务肯定也不会被扫描,那它肯定不会有效,所以我将事务配置放到了spring MVC的配置文件中,然后跟预想一样,事务起效了。

所以反过来,如果不移动配置,那么就需要将@Transactional加到service层中的类或方法上。

由此可见,我们就需要养成良好的分层习惯,因为一般的公司和项目都会分层,而如果我们没分层或者分的混乱,那么可能在别人那不会遇到的问题自己就会遇到,即使代码可能完全一样。另外,还说明了一个问题:那就是spring容器和spring mvc容器之间是层级关系的,具体的就是spring容器是spring mvc容器的父容器,在spring中的配置可以整个项目使用,spring mvc中的配置只能在spring mvc 作用范围内,也就是说spring mvc可以使用spring中配置的,spring不可以使用spring mvc中配置的。


你可能感兴趣的:(jdbc)