我们希望在后台启动作业,以便它不会使用应用程序内的所有资源,并且会影响应用程序的“正常”任务。它应该从正在运行的Java应用程序内部启动,而不是从命令行执行。

有人知道如何使用Spring调度将Spring Batch作业作为后台任务/守护程序启动吗?

最佳答案

经过更多调查后,我发现您可以为JobLauncher配置TaskExecuter。然后,您可以使用SimpleAsyncTaskExector并将其配置为守护进程并设置线程优先级。

@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;
}

10-06 14:02