无法回滚的代码
如下伪代码,在两条数据库插入操作之间抛出了异常,本来以为添加了@Transactional(rollbackFor = Exception.class)注解发生异常后会回滚,但是事与愿违,结果是发生异常后没回滚,第一条数据插入成功了
@Service
@Transactional(rollbackFor = Exception.class)
public class TestJobBean extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) {
dbService.insert("野猿新一");
int i = Integer.parseInt("我不是int啦"); // 此处会抛出NumberFormatException异常
dbService.insert("野猿新二");
}
}
可以回滚的代码
将业务相关的数据库操作代码抽出到独立的Service中,然后在该Service上添加@Transactional(rollbackFor = Exception.class)注解,如下代码所示
@Service
@Transactional(rollbackFor = Exception.class)
public class DBService {
protected void doSomething() {
dbService.insert("野猿新一");
int i = Integer.parseInt("我不是int啦"); // 此处会抛出NumberFormatException异常
dbService.insert("野猿新二");
}
}
@Service
public class TestJobBean extends QuartzJobBean {
@Resource
DBService dbService;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) {
dbService.doSomething();
}
}
这样就OK了,发生异常后就可以成功,至于为啥要这样写我也不清楚,有清楚的老铁可以留言评论下