【问题标题】:No way to catch route errors in Spark Java?无法在 Spark Java 中捕获路由错误?
【发布时间】:2017-05-06 20:58:33
【问题描述】:

Spark 类上有一个静态异常路径,但它只接受从 Exception 扩展而来的东西。如果发生的错误是 Throwable 但未扩展 Exception,则似乎无法在 Spark API 中捕获它以在将 500 返回给客户端之前对其进行记录或处理。

无法映射到 Spark.exception 的常见 Throwable 类型示例:java.lang.ExceptionInInitializerError

有什么方法可以在它们消失给客户端之前在 Spark 中获取它们,而不将每个路由的函数包装在 try/catch(Throwable) 中?

【问题讨论】:

    标签: java exception-handling spark-java


    【解决方案1】:

    您无法在 Spark 中捕获 Throwable 错误。

    问题是Throwable 包括Error 错误在编程上是不可恢复的,因此通常不会被捕获。 另一方面,Exception 可以通过编程方式恢复,因此您可能想要捕获一些东西。

    我推荐你阅读

    您应该问自己为什么要尝试捕获 Throwable 并可能修改该部分(如果是您的代码)。

    【讨论】:

    • 大多数 API 框架,例如 Jersey,都会为 Throwable 提供一个包罗万象的挂钩点,因为无论它是可恢复的还是不可恢复的,都会有错误流向您的客户端,并且您希望至少在它之前记录它。就 Spark 现在而言,如果抛出 Java 错误子类,则在每个端点方法中没有显式的 try / catch 块就无法在 500 发送到客户端之前记录它们。不过,我认为您的回答是正确的 - 和我得出的相同结论 - 他们只是没有办法做到这一点。
    • 顺便说一句,如果您愿意在项目中使用方面,可以这样做以确保记录任何可抛出的转义火花类。
    • 向客户返回一些东西也可能是不可能的。如果发生Error,例如,您可能没有更多内存。不能保证在那个时候做事。虽然尝试记录一些东西可能会很好..
    猜你喜欢
    • 2013-01-01
    • 2016-11-11
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多