最近几天发现项目中spring的声明式事务失效。找了很多资料看了不少博客,现在mark一下,给自己留个印象,也给后来者打开一个思路吧。
spring事务失效大体上有这几个原因,或者说可以从这几个方面着手检查,步步为营,一步步的找到问题所在。这也是排查问题的一般方法。
1.数据库是否已经开启了事务支持,尤其是mysql,检查表的引擎是否为innodb引擎。
2.检查spring注解配置是否重复扫描,在扫描@Controller时,不扫描@Service等。
3.shiro和spring aop会有冲突。解决办法是先不注入relam,在spring监听启动完成后再注入。
第三种情况比较特殊,在试用shiro做权限控制的时候,经常涉及到自定义relam,在relam中不能自动注入service依赖。而应该在spring监听运行完毕之后再进行依赖的绑定。这次我遇到的就是这个问题。这个问题比较小众,用shrio的才可能会遇到。但是为什么会出现这样的问题。我也没有太闹明白。留待以后再深究,也希望大神能给我解惑。