我对这个可完成的未来概念很陌生。我使用Spring的异步注释,为此我为执行器和异常处理程序添加了一个文件配置,如下所示:
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(CORE_POOL_SIZE);
taskExecutor.setMaxPoolSize(MAX_POOL_SIZE);
taskExecutor.setQueueCapacity(QUEUE_CAPACITY);
taskExecutor.setThreadNamePrefix("AsyncThread - ");
taskExecutor.initialize();
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return asyncExceptionHandler;
}
然后我有一个方法,我想异步运行并返回CompletableFuture:
@Async
public CompletableFuture<Void someMethod() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return CompletableFuture.completedFuture(null);
}
现在,如果在上述方法调用中发生了一些异常,那么我应该如何处理该异常?
注意:如果我不返回CompletableFuture并返回vo,它将转到异常处理程序AsyncUncaughtExceptionHandler,但根据我的要求,我想返回CompletableFuture Void。
这是预期的行为。查看AsyncExecutionAspectSupport
类方法handleError
:
protected void handleError(Throwable ex, Method method, Object... params) throws Exception {
if (Future.class.isAssignableFrom(method.getReturnType())) {
ReflectionUtils.rethrowException(ex);
}
else {
// Could not transmit the exception to the caller with default executor
try {
this.exceptionHandler.obtain().handleUncaughtException(ex, method, params);
}
catch (Throwable ex2) {
logger.warn("Exception handler for async method '" + method.toGenericString() +
"' threw unexpected exception itself", ex2);
}
}
}
如果方法返回类型是Future
的变体,则始终If(Future.class.isAssignableFrom(method.getReturnType())
,其计算结果为true
,并且异常被重新抛出,由更高级别的调用方处理,因此它不由AsyncUncaughtExceptionHandler
处理。
您可以通过CompletableFuture
提供的工具来处理异常,例如handle(双功能
我是Spring Boot的新手。在一个项目中,我想异步发送一封电子邮件。下面,你可以看到我到目前为止有什么。 我遇到的一个问题是:外部系统向控制器发送POST请求。如果在生成或发送邮件时发生异常,则不会调用。因此,控制器总是返回HTTP 201,因此调用者认为一切正常。 我将如何集成我的异常处理程序与在这样的异步方法? 控制器 服务 异常处理程序
我有一个ControllerAdvice类,它处理一组异常。我们还有其他一些例外情况,这些例外情况用注释进行了注释。为了结合这两种方法,我们使用博客文章中描述的技术:http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc,即在ControllerAdvice中,我们以以下方式处理一般异常: 它就像一个符咒,但是,使用此技术
问题很简单:我正在寻找一种优雅的方式,将<code>CompletableFuture#与<code>CompletableFuture#supplySync</code>一起使用。这是不起作用的: 我认为背后的想法正是为了处理抛出的情况。然而,如果我这样做,它会起作用: 我可以这样做,但是这看起来很可怕,而且让事情更难维护。有没有一种不需要将所有< code>Exception转换为< code
我试图将Hibernate与我的spring应用程序上下文联系起来。我正在成功地连接SessionFactory,但当我尝试调用getCurrentSession时,我看到以下错误: 我正在配置数据源会话工厂和事务管理器。我还指定了事务处理将是注释驱动的 下面是我的上下文XML: null 下面是我发现错误的类: 当这被称为sessionFactory时不是null,而是带有上述错误的错误。如果我
处理请求的过程中,Spring MVC可能会抛出一些的异常。SimpleMappingExceptionResolver可以根据需要很方便地将任何异常映射到一个默认的错误视图。但,如果客户端是通过自动检测响应的方式来分发处理异常的,那么后端就需要为响应设置对应的状态码。根据抛出异常的类型不同,可能需要设置不同的状态码来标识是客户端错误(4xx)还是服务器端错误(5xx)。 默认处理器异常解析器De
JMockit版本:1.47 Jupiter JUNIT版本:5.3.2 IntelliJ版本:2019.1 Ultimate 有谁能帮忙吗。