0
我們希望在後臺啓動一個作業,以便它不使用應用程序中的所有資源,並且可以影響應用程序的「正常」任務。它應該從正在運行的Java應用程序中啓動,而不是從命令行執行。如何啓動Spring批處理作業作爲後臺線程
有沒有人知道如何使用Spring調度作爲後臺任務/守護進程來啓動Spring Batch作業?
我們希望在後臺啓動一個作業,以便它不使用應用程序中的所有資源,並且可以影響應用程序的「正常」任務。它應該從正在運行的Java應用程序中啓動,而不是從命令行執行。如何啓動Spring批處理作業作爲後臺線程
有沒有人知道如何使用Spring調度作爲後臺任務/守護進程來啓動Spring Batch作業?
經過一番調查後,我發現你可以爲JobLauncher配置一個TaskExecuter。然後,您可以使用SimpleAsyncTaskExector並將其配置爲deamon並設置線程優先級。
@Bean
public JobLauncher jobLauncher(final JobRepository jobRepository, final TaskExecutor taskExecutor) {
final SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.setTaskExecutor(taskExecutor);
return jobLauncher;
}
@Bean
public TaskExecutor taskExecutor() {
SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.setDaemon(true);
taskExecutor.setThreadPriority(Thread.MIN_PRIORITY);
return taskExecutor;
}
您可以使用Spring Scheduler(https://spring.io/guides/gs/scheduling-tasks/)來安排任務。至於資源消耗,有很多因素會影響它。更糟糕的情況是,如果需要購買更多的內存,因爲內存相對便宜(也就是說,如果它託管在某個地方)。 – SL07
我知道我可以使用Spring Scheduler,但我並不是100%,Spring Scheduler實際上創建了一個像線程一樣具有低線程優先級的deamon。有什麼方法可以驗證它嗎?同樣在我的具體使用案例中,這項工作實際上只應運行一次,不應該安排重演。 – Tranquilized
我無法驗證Spring Scheduler會以低優先級運行。如果這是一項僅運行一次的工作,那麼爲它編寫腳本可能會更容易。您可以使用您的Spring應用程序根據所需條件執行該腳本。 – SL07