2017-06-02 166 views
0

我有一份工作,接受參數x=y,我已計劃每10秒運行一次。以下是我啓動它:爲什麼jobOperator.startNextInstance不接受參數?

final JobExecution previousExecution = jobRepository.getLastJobExecution(jobId, jobParameters); 
if (previousExecution != null && previousExecution.getStartTime() != null) { 
    return jobOperator.startNextInstance(jobId); 
} else { 
    return jobOperator.start(jobId, PropertiesConverter.propertiesToString(jobParametersConverter.getProperties(jobParameters))); 
} 

我第一次開始工作,這是不言而喻的else子句中,它成功啓動。 10秒後,它進入if子句,並且它也成功啓動。然後我手動運行作業(通過REST API),但是這次使用參數x=z並且它也成功運行它。然後10秒鐘過去,工作即將開始。現在jobRepository.getLastJobExecution返回正確的x=y執行,但猜測什麼 - jobOperator.startNextInstance不關心你的參數 - 它只接受jobId。並在其中加載錯誤的x=z實例,並從現在開始直到永遠每10秒開始運行x=z的作業。

我的問題是 - 爲什麼startNextInstance不接受jobParameters?我想爲給定的工作參數啓動nextInstance,爲什麼不允許?

回答

0

JobOperator,每個文檔都是一個低級別的界面,實際上並不是啓動Spring批處理作業的理想方式。 JobLauncher確實是在Spring Batch中啓動作業的正確方式,並且接受參數。

+0

嗯......'JobOperator'內部調用'JobLauncher' - 也許這就是爲什麼我認爲'JobLauncher'是低級的。 –

+0

關於爲什麼創建'JobOperator',我沒有完整的歷史記錄,但大多數啓動作業的Spring組件都使用'JobLauncher'。例如,在Spring Boot中,作業通過'JobLauncherCommandLineRunner'啓動。 –

相關問題