// Но как мне запустить это задание?
Чтобы запустить задание, вам нужно использовать JobLauncher
.Например:
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
//jobLauncher.setJobRepository(yourJobRepository);
//jobLauncher.setTaskExecutor(yourTaskExecutor);
jobLauncher.afterPropertiesSet();
jobLauncher.run(job, new JobParameters());
Однако при таком подходе вам нужно будет самостоятельно настроить компоненты инфраструктуры, необходимые для Spring Batch (JobRepository
, JobLauncher
и т. Д.).
Я бырекомендуем использовать типичную конфигурацию задания Spring Batch и запускать задание по методу executeCsvReading
.Вот пример:
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableBatchProcessing
public class MyJob {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
public MyJob(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
this.jobBuilderFactory = jobBuilderFactory;
this.stepBuilderFactory = stepBuilderFactory;
}
@Bean
public Step step() {
return stepBuilderFactory.get("step")
.tasklet((contribution, chunkContext) -> {
System.out.println("hello world");
return RepeatStatus.FINISHED;
})
.build();
}
@Bean
public Job job() {
return jobBuilderFactory.get("job")
.start(step())
.build();
}
}
С этой конфигурацией задания вы можете загрузить контекст приложения Spring и запустить свое задание следующим образом:
public void executeCsvReading() {
ApplicationContext context = new AnnotationConfigApplicationContext(MyJob.class);
JobLauncher jobLauncher = context.getBean(JobLauncher.class);
Job job = context.getBean(Job.class);
jobLauncher.run(job, new JobParameters());
}
Обратите внимание, что загрузка приложения Springконтекст можно сделать вне метода executeCsvReading
, чтобы он не загружался при каждом вызове этого метода.При таком подходе вам не нужно настраивать компоненты инфраструктуры, необходимые для Spring Batch, они будут автоматически созданы и добавлены в контекст приложения.Конечно, при необходимости их можно переопределить.
Heads up: Если вы добавите класс конфигурации MyJob
в пакет приложения Spring Boot, Spring Boot по умолчанию выполнит задание при запуске.Вы можете отключить это поведение, добавив spring.batch.job.enabled=false
в свойства своего приложения.
Надеюсь, это поможет.