0

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

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

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

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

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

谢谢你的帮助!

4

2 回答 2

0

我的简短回答是:不要将脚本用于耗时的过程。

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

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

这种方法的好处是

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

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

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

于 2015-01-29T12:27:47.503 回答
0

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

动态 Bean

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

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

现在您拥有 Java、Spring、Groovy 和 hybris 的全部功能。正确隔离每个进程,这样异常就不会冒泡并导致整个进程崩溃。

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

自己滚

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


没有限制,但首先要离开浏览器控制台来完成繁重的脚本任务。

于 2014-07-17T07:13:41.900 回答