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

Java Spring@Async抽象在异常处理方面存在漏洞,java,spring,Java,Spring,当使用Spring的@Async注释时,当方法的抛出子句中出现(已检查)异常时,抽象是泄漏的。编译器将强制调用方处理异常,但实际上调用方永远不会看到@Async方法引发的异常。相反,根据实现的不同,它将由Spring处理和记录,或者提供给用户配置的异常处理程序,或者在对返回值调用Future\get()时生成 因此,我认为@Async方法通常不应该抛出已检查的异常。相反,它们应该将所有选中的异常包装为RuntimeException类型,以便不存在throws子句 这是准确的评估吗?是否有修复泄

当使用Spring的
@Async
注释时,当方法的
抛出
子句中出现(已检查)异常时,抽象是泄漏的。编译器将强制调用方处理异常,但实际上调用方永远不会看到
@Async
方法引发的异常。相反,根据实现的不同,它将由Spring处理和记录,或者提供给用户配置的异常处理程序,或者在对返回值调用
Future\get()
时生成

因此,我认为
@Async
方法通常不应该抛出已检查的异常。相反,它们应该将所有选中的异常包装为
RuntimeException
类型,以便不存在
throws
子句

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


可能相关:

您的评估可能是正确的

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

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

void doMangle() throws YourCheckedException {
    ...
}

一般来说,Spring更喜欢未经检查的异常(查看Spring数据中的异常转换),异步方法抛出任何异常(这就是为什么
Future
wrapps异常)。当@async'ed方法不返回任何值时,真正的问题就开始了。然后发生了一些有趣的事情;)有什么特别有趣的事情,R4J?