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