使用Java停止运行Kettle Job / Transformation

时间:2015-10-13 06:08:16

标签: java pentaho etl kettle pentaho-design-studio

我正在使用Java开发基于Web应用程序的ETL(使用Kettle引擎)。

我试图阻止正在运行的作业时遇到问题。我不确定使用CarteSingleton.java是否正确。我正在使用自定义单例映射。

我的代码如下

Job job = new Job(null, jobMeta);
job.setLogLevel(LogLevel.DETAILED);
job.setGatheringMetrics(true);
job.start();

调用job.start()之后,我试图将该作业对象存储在自定义单例映射中,并检索存储在map中的确切Job对象,以及调用stopAll()(请参阅代码在另一个REST调用中,当Job的状态为RUNNING时,停止它。 但这并不能阻止正在运行的工作。 Kettle Engine没有得到通知!工作执行继续。 .kjb / .ktr正在使用SPOON创建,尽管我没有使用SPOON来运行/停止执行。

是否有任何Kettle API配置我无法更改,以便能够使用

   same job object
   job.stopAll();

请您指教API和示例示例,如果有任何停止正在运行的JOB或使用Java进行转换?

这里的任何指示或帮助都会很棒!再次谢谢。

此致 Sanjeev

1 个答案:

答案 0 :(得分:5)

您的方法似乎是正确的。但请注意,无法保证立即停止 - 它只是设置一个标志,指示执行不应继续。

Job.stopAll() sets the flag它是checked before the execution starts,但是如果它已经开始它就不会当场阻止它

Trans.stopAll()行为相似。 It asks each step to stop和那个标志is checked inside步骤。