springmvc+mybatis 事务回滚

spring的事务管理要在xml文件中进行配置,包括

事务管理器:


    
    	
    

开启事务:


    

然后在想要实现事务管理的方法上面添加 @Transactional 注解即可,添加注解的方法要是public方法,也可以添加在类上面,表示类中所有方法都实现事务管理,

当方法抛出异常时spring会自动回滚事务,常用

throw new RuntimeException();

当需要方法正常返回时,也可以手动回滚

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

事务管理一般放在service层

 

SpringMVC+MyBatis事务不回滚问题的解决办法

Spring容器优先加载由ServletContextListener(对应root-context.xml)产生的父容器,而SpringMVC(对应mvc_dispatcher_servlet.xml)产生的是子容器。子容器Controller进行扫描装配时装配的@Service注解的实例是没有经过事务加强处理,即没有事务处理能力的Service,而父容器进行初始化的Service是保证事务的增强处理能力的。如果不在子容器中将Service exclude掉,此时得到的将是原样的无事务处理能力的Service,因为在多上下文的情况下,

如果同一个bean被定义两次,后面一个优先。

注意:一个bean被定义两次,后面一个优先。这一点很重要,之前我就遇到这个问题,事务管理始终不好使。

 事务管理也可以放在controller层,只要将启动事务的代码从spring-bean.xml移到spring-mvc.xml中就可以了。

https://blog.csdn.net/java_2017_csdn/article/details/77882162

你可能感兴趣的:(java,web)