当前位置: 首页 > 知识库问答 >
问题:

Spring@Async抽象在异常处理方面存在漏洞

经佐
2023-03-14

当使用Spring的@Async注释时,当涉及到方法的throws子句中的(选中的)异常时,抽象是泄漏的。编译器将强制调用者处理异常,但实际上调用者永远不会看到@Async方法抛出的异常。相反,根据实现,它将被处理

因此,我的观点是,异步方法通常不应该抛出已检查的异常。相反,它们应该将所有选中的异常包装为运行时异常类型,以便不存在抛出子句。

这是一个准确的评估吗?是否有任何工具或编程方法可以修复泄漏?是否有人碰巧知道Spring开发人员对此有何看法,或者是否有任何计划来改善这种情况?谢谢

可能相关:Spring异步方法隐藏异常

共有1个答案

吕志诚
2023-03-14

你的评价很可能是正确的。

现在,如果要处理上述异常,只需执行以下操作:

@Async
void mangle() {
    try {
        doMangle();
    } catch (YourCheckedException e) {
        // Handle it
    }
}

void doMangle() throws YourCheckedException {
    ...
}
 类似资料:
  • 我是Spring Boot的新手。在一个项目中,我想异步发送一封电子邮件。下面,你可以看到我到目前为止有什么。 我遇到的一个问题是:外部系统向控制器发送POST请求。如果在生成或发送邮件时发生异常,则不会调用。因此,控制器总是返回HTTP 201,因此调用者认为一切正常。 我将如何集成我的异常处理程序与在这样的异步方法? 控制器 服务 异常处理程序

  • 问题很简单:我正在寻找一种优雅的方式,将<code>CompletableFuture#与<code>CompletableFuture#supplySync</code>一起使用。这是不起作用的: 我认为背后的想法正是为了处理抛出的情况。然而,如果我这样做,它会起作用: 我可以这样做,但是这看起来很可怕,而且让事情更难维护。有没有一种不需要将所有< code>Exception转换为< code

  • 我正在使用@ExceptionHandler处理spring中的异常。controller抛出的任何异常都将使用@ExceptionHandler注释的方法捕获,并相应地执行操作。为了避免为每个控制器编写@ExceptionHandler,我使用了@ControllerAdvice注释。 一切都像预期的那样很好。 现在我有了一个过滤器(是的,不是拦截器,用于处理某些需求),它是使用Delegati

  • 我对Spring批处理跳过逻辑有一些问题。我已经配置了一个作业的步骤来跳过两个异常(SQLIntegrityConstraintViolation异常和乐观锁定失败异常): 但当作业运行时,由于我将其配置为跳过的异常,作业以未知状态完成: 我做错什么了吗?我希望这一步跳过负责抛出其中一个异常的项,并继续处理,以便以完成状态结束。

  • 问题内容: 下面是代码片段;基本上,当错误代码不是200时,我正在尝试传播异常。 但是,在服务器响应为500的情况下,出现异常 我真的需要在尝试中包装其余模板交换方法吗?那么代码的目的是什么? 问题答案: 你想要创建一个实现的类,然后使用它的一个实例来设置其余模板的错误处理: 此外,Spring仅提供一个类,你可以扩展该类,而不是实现接口,以防万一你只想覆盖该方法。

  • 主要内容:DefaultHandlerExceptionResolver,ResponseStatusExceptionResolver,ExceptionHandlerExceptionResolver,SimpleMappingExceptionResolver在实际的应用开发中,经常会不可避免地遇到各种可预知的、不可预知的异常,此时我们就需要对这些异常处理,以保证程序正常运行。 Spring MVC 提供了一个名为 HandlerExceptionResolver 的异常处理器接口,它可以