(郁闷系列)让我郁闷的Spring事务回滚及对其它AOP操作的影响

问题很简单,使用Spring声明式事务管理,框架采用spring+hibernate,编程上采用Srping封装的Hibernate模板,架构上分为三层表示层+service+dao

首先,我采用Aop来处理Service层抛出的异常,例如MyExceptionAdvice,当然了,处理异常的类需要实现ThrowAdvice接口,但是这个时候问题就来了,假设这个时候从service层抛出Runtime异常,那么此时Spring的事务会回滚,,我MyExceptionAdvice里面规定的方法也能接收到这个异常,另外,我还想在MyExceptionAdvice里对数据库进行一步操作,那么这个时候这个操作就不会生效。最现实的例子就是,当有异常发生时,我需要向数据库插入一条日志。但是基于上述我所说的,这条日志不能成功的插入到数据库。

原因分析及尝试的解决办法:

原因应该是,由于抛出runtime异常,所以事务回滚造成的,这时,我们就会想,能不能重新启动一个事务,按照Spring事务定义的策略,可以在事务定义的时候将写日志的方法定义为REQUIRES_NEW,但是实践下来,好像也不管用,那位用过这个的给说说?

你可能感兴趣的:(spring,AOP,编程,Hibernate,配置管理)