【问题标题】:Handling "Internal server error" in Groovy-Console在 Groovy-Console 中处理“内部服务器错误”
【发布时间】:2014-07-15 09:24:56
【问题描述】:

我有一个 groovy 脚本,大约需要 5 个小时才能完成(它会重新启动(删除旧的并开始新的)许多工作流程),不幸的是,有些工作流程无法得到处理并引发“内部服务器错误”这结束了 groovy 调用。

我现在所能做的就是查看日志并重新启动 groovy 脚本并排除有问题的工作流 ID。

如果我能在 hac 中捕捉到这个“内部服务器错误”并继续下一个工作流程而不是中止脚本,那将是一个很好的性能提升.

我已经尝试将其放入 try/catch 中,但这不起作用。

是否有机会“忽略”“内部服务器错误” - 我要处理的列表条目?

感谢您的帮助!

【问题讨论】:

  • 使用可以捕获 HTTP 500 响应的 try/catch 块或 HTTP 库?请提供一些代码。

标签: exception groovy hybris


【解决方案1】:

本机运行 Groovy 脚本,而不是通过 HAC。 Groovy/Beanshell 控制台对于快速原型制作很方便,但通过浏览器界面运行 5 小时的过程似乎充其量是笨拙的。您至少有两种选择:

动态 Beans

您是否知道 Spring bean 可以使用 Dynamic language beans 使用多种不同的语言来实现?

为您的流程定义接口并使用 Spring 配置将它们连接到 Groovy 实现。由于脚本是在运行时解释的,因此您可以换出代码而无需重新编译整个平台。

现在您拥有 Java、Spring、Groovy 和 hybris 的全部功能。正确隔离每个进程,以免异常冒出并导致整个进程崩溃。

此选项将是最简洁的方法,因为您会将代码直接集成到项目的代码库中。您可以保留所有现有的 [ Groovy | JRuby |豆壳 | ... ] 代码。

自己动手

您可能会尝试的另一件事是检查 hybris 的 Groovy API。我能够利用 hybris 的 Beanshell 解释器类来创建我自己的测试工具。它是一个简单的独立 Eclipse 项目,允许我在 Eclipse 中编写和运行 Beanshell,并输出到控制台。我每天都用它来完成快速脚本任务,比如批量更新、灵活搜索查询等。我想你可以用 Groovy 做同样的事情。在 hybris API 中搜索用于解释来自浏览器的 Groovy 请求的 HAC 代码。


没有限制,但首先要退出浏览器控制台以执行繁重的脚本任务。

【讨论】:

  • 非常感谢您的提示;问题是这些 groovy 脚本是与使用实时系统的业务并行编写的。例如,没有每周启动的“标准”脚本。是否可以在 hybris 中集成这些单独的脚本(暂时未知,但稍后)(我只是切换一个类的代码?)而不构建和重新启动整个东西?
  • 这些 5 小时脚本之一的示例是:“重新启动处于已定义条件的所有工作流”
  • Niko,绝对可以用Spring Dynamic Beans 替换代码。通过启动远程调试会话,您知道异常在哪里被错误处理吗?我认为您可以简单地将方法调用包装在 try 块中。在 Groovy 脚本和浏览器控制台中适当地处理 Exceptions。尽管我仍然认为在 Eclipse 或您选择的 IDE 中创建“控制台”相当简单。如您所说,它可以与实时系统完全分开,“平行”。
【解决方案2】:

我的简短回答是:不要在耗时的过程中使用脚本。

尽管您提到无法定义标准脚本,因为业务是并行工作的,我不建议以这种方式维护实时系统。

将该逻辑集成到自定义 CronJob 中,并将所有可配置/动态的东西添加为所述作业的属性。

这种方法的好处是

  • 您有适当的日志记录机制(HAC Groovy 控制台 sux 中的 Sysout)
  • 您可以跟踪您的执行情况(消耗的时间、开始时间、停止时间等)
  • 可以自动触发(CronJob 触发器)或由其他指示用户触发(例如操作)
  • 您将获得一个更稳定的整体工作流程(也就是说,无需跟踪那些神奇的脚本(您如何对它们进行版本控制?在资源文件夹中?))

这样做的缺点确实是,您需要重新部署

根据我的经验,动态更改的代码(以动态 Bean 为例)适用于复杂度相对较低的项目,但很快就会变得混乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多