创建TaskExecutor
现在我们需要创建一个TaskExecutor,它将用于启动Spring Batch作业。为此,我们将创建一个TaskLauncher实现,如下所示:
代码语言:javascript复制import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.task.listener.TaskExecutionListener;
import org.springframework.cloud.task.repository.TaskExecution;
import org.springframework.cloud.task.repository.TaskExplorer;
import org.springframework.cloud.task.repository.TaskRepository;
import org.springframework.stereotype.Component;
@Component
public class BatchTaskExecutor {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
@Autowired
private TaskRepository taskRepository;
@Autowired
private TaskExplorer taskExplorer;
@Autowired
private TaskExecutionListener taskExecutionListener;
public void execute(TaskExecution taskExecution) throws Exception {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("time", System.currentTimeMillis())
.toJobParameters();
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
taskExecution.setExitMessage(jobExecution.getExitStatus().getExitDescription());
taskExecution.setEndTime(jobExecution.getEndTime());
taskExecution.setExitCode(jobExecution.getExitStatus().getExitCode());
taskExecution.setTaskName(jobExecution.getJobInstance().getJobName());
taskExecution.setStartTime(jobExecution.getStartTime());
taskExecution.setErrorMessage(jobExecution.getExitStatus().getExitDescription());
taskRepository.update(taskExecution);
taskExplorer.updateTaskExecution(taskExecution);
}
}
这个类中,我们注入了jobLauncher,job,taskRepository,taskExplorer和taskExecutionListener。我们定义了一个execute方法,该方法将使用jobLauncher启动作业,然后将任务执行的结果存储在taskExecution对象中,并将其更新到taskRepository和taskExplorer中。