Spring Batch Command Line Job Runner

java org.springframework.batch.core.launch.support.CommandLineJobRunner jobPath <options> jobIdentifier (jobParameters)
 
# example
java org.springframework.batch.core.launch.support.CommandLineJobRunner testJob.xml testJob schedule.date=2008/01/24 vendor.id=3902483920

SpringBoot 와 연동

아래 사용하지 말 것. SpringBoot와 SpringBatch 참조


bootJar {
    mainClassName = 'org.springframework.batch.core.launch.support.CommandLineJobRunner'
}

Spring batch Job이 자동시작되는 것을 막고 명시적 실행만 되게 하려면 다음 설정이 application.yml에 필요하다.

spring:
  batch:
    job:
      enabled: false

이제 Java Config 파일에 Job을 @Configuration@EnableBatchProcessing이 필요하다. 생성해준다.

@Configuration
@EnableBatchProcessing
public class SpringBatchConfig {
 
    Logger logger = LoggerFactory.getLogger(SpringBatchConfig.class);
 
    @Autowired
    public JobBuilderFactory jobBuilderFactory;
 
    @Autowired
    public StepBuilderFactory stepBuilderFactory;
 
    @Bean
    public Job job1() {
        return jobBuilderFactory.get("job1")
                .incrementer(new RunIdIncrementer())
                .start(step1()).build();
    }
 
    private TaskletStep step1() {
        Tasklet tasklet = (contribution, context) -> {
            logger.info("This is from tasklet step with parameter ->"
                    + context.getStepContext().getJobParameters().get("message"));
            return RepeatStatus.FINISHED;
        };
        return stepBuilderFactory.get("step1").tasklet(tasklet).build();
    }
}

이제 gradlew build 로 생성된 통합 jar 파일을 직접 실행하는 방식으로 처리 가능해진다.

java -jar build/libs/example-0.0.1-SNAPSHOT.jar com.example.config.SpringBatchConfig \
    jobName message=hi