写这篇文章之前先说明一下:
1. Controller中添加事务管理,是可行的,但是强烈不推荐,因为不符合实际开发场景,还会导致一系列问题
2. 事务请在Service处理,所有的业务逻辑请写在 Service, Service中异常请抛出,慎用 try...catch捕获异常
写这边文章的背景:
公司有个老的项目,springMVC + spring + mybatis,事务是在Service层处理的,但是之前的开发人员把很多业务逻辑写在了 Controller,出现了操作失败仍然将数据写入数据库的bug.....,于是开始研究在 Controller中添加事务管理
Controller中添加事务管理步骤:
1. spring.xml中事务配置不变
2. 在spring-mvc.xml中定义事务配置:
A: 命名空间中 加入约束 不加项目启动会报异常:
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
B: 定义事务注解解析
3. 在需要控制事务的Controller 类或者方法上使用 @Transactional(rollbackFor = {Exception.class}) ,当出现异常回滚
需要注意的是: Controller层只支持 @Transactional 注解式事务!
关于为什么要在spring-mvc.xml中添加 的说明:
错误的方式----通过修改spring.xml中的配置来实现在controller中控制事务会发现事务无效,如下:
<