2017-02-28 194 views
0

我們希望在後臺啓動一個作業,以便它不使用應用程序中的所有資源,並且可以影響應用程序的「正常」任務。它應該從正在運行的Java應用程序中啓動,而不是從命令行執行。如何啓動Spring批處理作業作爲後臺線程

有沒有人知道如何使用Spring調度作爲後臺任務/守護進程來啓動Spring Batch作業?

+0

您可以使用Spring Scheduler(https://spring.io/guides/gs/scheduling-tasks/)來安排任務。至於資源消耗,有很多因素會影響它。更糟糕的情況是,如果需要購買更多的內存,因爲內存相對便宜(也就是說,如果它託管在某個地方)。 – SL07

+0

我知道我可以使用Spring Scheduler,但我並不是100%,Spring Scheduler實際上創建了一個像線程一樣具有低線程優先級的deamon。有什麼方法可以驗證它嗎?同樣在我的具體使用案例中,這項工作實際上只應運行一次,不應該安排重演。 – Tranquilized

+0

我無法驗證Spring Scheduler會以低優先級運行。如果這是一項僅運行一次的工作,那麼爲它編寫腳本可能會更容易。您可以使用您的Spring應用程序根據所需條件執行該腳本。 – SL07

回答

0

經過一番調查後,我發現你可以爲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; 
} 
相關問題