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

Spring Boot@Async方法的异常处理

公孙弘深
2023-03-14

我是Spring Boot的新手。在一个项目中,我想异步发送一封电子邮件。下面,你可以看到我到目前为止有什么。

我遇到的一个问题是:外部系统向控制器发送POST请求。如果在生成或发送邮件时发生异常,则不会调用GlobalExceptionHandler。因此,控制器总是返回HTTP 201,因此调用者认为一切正常。

我将如何集成我的异常处理程序与@Controlller建议在这样的异步方法?

控制器

@PostMapping(value = "/mail", consumes = MediaType.APPLICATION_JSON_VALUE)
public void send(@Validated @RequestBody EmailNotificationRequest emailNotificationRequest) throws MessagingException {
    emailService.sendMessage(emailNotificationRequest);
}

服务

@Async
public void sendMessage(EmailNotificationRequest emailNotificationRequest) throws MessagingException {
    MimeMessage mimeMessage = javaMailSender.createMimeMessage();

    // build the message

    javaMailSender.send(mimeMessage);
}

异常处理程序

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler extends AbstractExceptionHandler {

    /**
     * Handles any exception which is not handled by a specific {@link ExceptionHandler}.
     */
    @ExceptionHandler(value = {Throwable.class})
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ApplicationResponse handleThrowable(Throwable ex) {
        log.error("An unhandled error occurred: {}", ex.getMessage());
        return buildErrorResponse();
    }
}

共有1个答案

申屠昆
2023-03-14

如何移动@Async到一个较低的级别,所以只有

javaMailSender。发送(mimessage)

将以异步方式调用?

使用公共异步方法将其提取到另一个bean,该方法包装javaMailSender,并从sendMessage

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

  • TestController使用一个TestService,它有一个Spring@async asyncComp.getGood(s)方法。当输入字符串不是“good”时,会引发异常。TestController将获得异常,在其余响应中,状态500内部服务器错误。我找不到我项目的确切代码,但找到了一些关于使用CompletableFuture的想法。在答案区域,我发布了我写的作为测试应用程序的内容

  • 用mockito模仿异步(< code>@Async)方法的最好方法是什么?提供以下服务: 莫基托的验证如下: 测试方法上面将始终抛出: 如果我从方法中删除,则不会发生上述异常。 Spring Boot版本:1.4.0.RELEASE Mockito版本:1.10.19

  • 本文向大家介绍springboot框架的全局异常处理方案详解,包括了springboot框架的全局异常处理方案详解的使用技巧和注意事项,需要的朋友参考一下 系统框架搭建的前期过程中,为了约束代码规范,我们会对一些通用功能做一些处理,比如声明一些系统公用错误类、封装通用返回结果、统一异常处理等,这样做的优势是团队开发过程中能够形成统一的代码规范,增强代码可读性,同时又便于后期代码维护。本文主要介绍下

  • 当使用Spring的注释时,当涉及到方法的子句中的(选中的)异常时,抽象是泄漏的。编译器将强制调用者处理异常,但实际上调用者永远不会看到方法抛出的异常。相反,根据实现,它将被处理 因此,我的观点是,异步方法通常不应该抛出已检查的异常。相反,它们应该将所有选中的异常包装为运行时异常类型,以便不存在抛出子句。 这是一个准确的评估吗?是否有任何工具或编程方法可以修复泄漏?是否有人碰巧知道Spring开发

  • 本文向大家介绍springboot全局异常处理详解,包括了springboot全局异常处理详解的使用技巧和注意事项,需要的朋友参考一下 一、单个controller范围的异常处理 说明: 在controller中加入被@ExceptionHandler修饰的类即可(在该注解中指定该方法需要处理的那些异常类) 该异常处理方法只在当前的controller中起作用 二、全部controller范围内起