之前做excel表格导入,发现如果导入10条数据,在第九条时数据校验出错,则前八条数据会成功导入,第九条之后的数据没进行导入,现在自定义一个事务回滚,让之前导入的八条数据回滚,即:若第n条数据校验失败时,一条数据也不导入。
ServiceImpl层
@Autowired
private PlatformTransactionManager platformTransactionManager;
@Autowired
private TransactionDefinition transactionDefinition;
@Override
public String test(int num) {
TransactionStatus transaction = platformTransactionManager.getTransaction(transactionDefinition);
String errorMsg = null;
//获取最后一行的num,即总行数
int maxRow = sheetAt.getLastRowNum();
try {
//具体的事务操作
.......
if(num>0){
errorMsg="数据错误!";
throw new Expection;
}
platformTransactionManager.commit(transaction);
}catch (Exception e){
//进行回滚
platformTransactionManager.rollback(transaction);
return errorMsg;
}
return "导入成功";
}
需要注意的是,在方法里实现自定义事务回滚时不要再加@Transactional注解