我正在使用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
答案 0 :(得分:5)
您的方法似乎是正确的。但请注意,无法保证立即停止 - 它只是设置一个标志,指示执行不应继续。
Job.stopAll()
sets the flag它是checked before the execution starts,但是如果它已经开始它就不会当场阻止它
Trans.stopAll()
行为相似。 It asks each step to stop和那个标志is checked inside步骤。