网站在启动时,会先加载Spring父容器(配置文件),再去加载MVC子容器(配置文件),所以在使用注释配置的情况下,子容器扫描包下的配置会顶替父容器的配置,而事务是属于Spring下的。在MVC配置文件中要去除service包(一般情况下事务配置在service层)。最好使Spring和MVC各自负责扫描自己下的包,比如在Spring中配置
<context:component-scan base-package="com.spitter">
<!--将Controller的注解排除掉 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<context:component-scan base-package="com.spitter">
<!--将Controller的注解排除掉 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
事务注意事项:
事务默认在发生非检查性异常时回滚,对于检查性异常可以添加@Transactional(rollbackFor=Exception.class)属性。如果业务逻辑代码位于try catch中,不会发生回滚,除非在catch中再抛出异常。