2017-02-28 89 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; 
} 
相关问题