默认spring只在发生未被捕获的runtimeexcetpion时才回滚。
最容易解决的办法:代码级控制:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
try{
...
}catch(Exception e){
log.error(e.getMessage(),e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw new RuntimeException( e.getMessage(), e );
}
但这不是从根本上解决问题。为什么不加这句抛出runtimeException异常不回滚呢
看看自己的代码是不是最后写了
finally{
return ...
}
如果这样写,即使手动抛出runtimeException也不会回滚了,具体原因可参见
《java异常捕捉陷阱(内存泄漏,finally块,catch块,继承得到的异常)》
http://blog.csdn.net/zshake/article/details/9207791