在 Springboot 中 Schedulers.elastic 时 Webflux 不传播异常
Webflux not propagating exception when Schedulers.elastic in Springboot
我在尝试使用 webflux 时在 Springboot 上处理异常时遇到问题。
我已经实现了一个 ResponseEntityExceptionHandler class,它工作正常,但是,如果从 WebFlux 线程抛出异常,那么它永远不会被调用(尽管如果使用 Schedulers.immediate(),在这种情况下是异常处理程序也称为)。
复制我发现的那个问题的最简单方法是执行:
Mono.fromCallable(() -> {
throw new IllegalArgumentException();
})
.doOnError(throwable -> {
throw new IllegalArgumentException();
})
.subscribeOn(Schedulers.elastic())
.subscribe(result -> {}, throwable -> {throw new IllegalArgumentException();});
正如我所说,如果我不使用 Schedulers.elastic() 而使用 Schedulers.immediate(),那么我可以在我的 ResponseEntityExceptionHandler class 上处理异常。我如何传播异常,以便我始终可以在我的处理程序上处理它 class?
提前致谢
我终于让 Spring 处理异常(通过 ExceptionHandler),所以在我的控制器中我将响应设置为:
final DeferredResult<ResponseDTO> result = new DeferredResult<>();
Mono.fromCallable(...).subscribe(result::setResult, result::setErrorResult);
我在尝试使用 webflux 时在 Springboot 上处理异常时遇到问题。 我已经实现了一个 ResponseEntityExceptionHandler class,它工作正常,但是,如果从 WebFlux 线程抛出异常,那么它永远不会被调用(尽管如果使用 Schedulers.immediate(),在这种情况下是异常处理程序也称为)。 复制我发现的那个问题的最简单方法是执行:
Mono.fromCallable(() -> {
throw new IllegalArgumentException();
})
.doOnError(throwable -> {
throw new IllegalArgumentException();
})
.subscribeOn(Schedulers.elastic())
.subscribe(result -> {}, throwable -> {throw new IllegalArgumentException();});
正如我所说,如果我不使用 Schedulers.elastic() 而使用 Schedulers.immediate(),那么我可以在我的 ResponseEntityExceptionHandler class 上处理异常。我如何传播异常,以便我始终可以在我的处理程序上处理它 class?
提前致谢
我终于让 Spring 处理异常(通过 ExceptionHandler),所以在我的控制器中我将响应设置为:
final DeferredResult<ResponseDTO> result = new DeferredResult<>();
Mono.fromCallable(...).subscribe(result::setResult, result::setErrorResult);