@Transactional放在controller中无法回滚的问题
如下代码:
调用该接口,预期的结果是会报异常并且添加操作进行回滚。但是结果却是事务没有回滚,数据正常加入数据库中。
原因分析:(个人理解,不晓得对不对)
因为spring的context和mvc是分开的,spring的是父容器,springMVC是子容器。子容器可以取到父容器中的bean,而父容器不能取到子容器中的bean。大致如下:
因为事务是由spring管理的,而controller是由springMVC来管理的。在springmvc扫描controller的时候,无法识别@Transactional注解,所以无法生效。
所以放在Service中就能生效:spring扫描@Service的时候可以识别到@Transactional注解。