Transaction rolled back because it has been marked as rollback-only
在工作的过程中,需要改动前人的代码,修改完毕之后总是报这个错误。
搜索了一番,原因是使用Spring事务管理的时候,某个子service回滚了事务,导致最外层的service也回滚了事务,debug查看外层service status也没有设置回滚。
代码结构:org.springframework.transaction.support.TransactionTemplate
transactionTemplate.execute(new TransactionCallback<Object>() {
// 事务处理
@Override
public Object doInTransaction(TransactionStatus status) {
try {
<span style="white-space:pre"> </span>// TODO service
}catch(Exception e) {
status.setRollbackOnly();
return null;
}
}
});
由于最外层service过于复杂,在其调用某个service的时候回滚了,并且子service的异常也被catch到了,无法抛出,子service返回结果出错也没有处理。
service {
try {
goOtherService();
}catch{
status.setRollbackOnly();
}
}
goOtherService(){
try {
doService();
}catch{
mystatus.setRollbackOnly();
}
}