【问题标题】:Identify if transaction is committed确定事务是否已提交
【发布时间】:2021-12-13 03:41:26
【问题描述】:

在我的应用程序中,我遇到了这样一种情况,即在插入数据库时​​,抛出运行时异常,从而回滚整个事务,这是预期的。

但是我们如何从 Controller 中识别当事务成功提交时被回滚以相应地发送响应。

提前致谢。

【问题讨论】:

  • 通过(尝试并)在您的控制器中捕获(/任何)运行时异常...!?
  • 如果这还不够,您可以gain "complete control" of the (current) transaction,但必须将状态传播到控制器...
  • 考虑使用更简洁的代码,而不是 try/catch ``` @ControllerAdvice @RestController public class RestExceptionHandler { @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(Exception.class) public ResponseEntity exceptionHandler (异常 e,WebRequest 请求){ log.error(request.getDescription(false)); log.error(HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase() + e.getMessage(), e);返回新的 ResponseEntity(e.toString(), HttpStatus.INTERNAL_SERVER_ERROR); ```
  • 如果我明确抛出运行时异常,事务会回滚吗?

标签: java spring-boot hibernate spring-transactions


【解决方案1】:

您可以使用

获取当前交易的状态
TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2020-01-03
    • 2015-08-04
    • 2013-11-20
    相关资源
    最近更新 更多