将来抛出异常时如何回滚事务?

时间:2017-10-25 12:15:07

标签: java spring multithreading jpa

我有一个Spring + JPA应用程序。我的服务执行一些数据库持久性操作和异步长计算:

@Transactional(rollbackFor = Exception.class)
public MyEntity execute(MyEntity entity) {
    //database operations
    em.persist(entity);

    Executors.newSingleThreadExecutor().submit(() -> {
        //long calculations
        if (errorOccurs)
            throw new RuntimeException("Rollback transaction");
    });

    return entity;
}

我想在将来发生异常时回滚数据库更改。我该怎么办?

1 个答案:

答案 0 :(得分:1)

这看起来像DAO类(数据访问对象)。通常,您希望尽可能缩短数据库连接或事务处理,因此这看起来不错。

我不知道你的长期计算是什么,但是在你坚持实体之前我会做到。

异步和潜在的并行计算可能非常有用,但在这里我看到的危险多于收益,如果等待完成,你会让数据库事务挂起很长时间。