====== Spring Batch Command Line Job Runner ======
* [[springframework:batch|Spring Framework Batch]] 명령행 실행기
* Spring Batch를 명령행으로 실행할 수 있다.
* [[https://www.mkyong.com/spring-batch/run-spring-batch-job-with-commandlinejobrunner/|Run Spring batch job with CommandLineJobRunner – Mkyong.com]]
* [[https://github.com/spring-projects/spring-batch/blob/master/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/CommandLineJobRunner.java|spring-batch/CommandLineJobRunner.java at master · spring-projects/spring-batch]]
java org.springframework.batch.core.launch.support.CommandLineJobRunner jobPath jobIdentifier (jobParameters)
# example
java org.springframework.batch.core.launch.support.CommandLineJobRunner testJob.xml testJob schedule.date=2008/01/24 vendor.id=3902483920
* ''jobPath'' : XML 파일 경로 혹은 Java Config class FQCN 둘 다 지원. javadoc 에는 XML만 지원하는 것 처럼 나왔지만 config class도 지원
* ''jobIdentifier'' : job name
* ''jobParameters'' 는 ''key=value'' 형태로 여러개 쭉 지정한다.
===== SpringBoot 와 연동 =====
아래 사용하지 말 것. [[springframework:springboot:batch|SpringBoot와 SpringBatch]] 참조
-------------
* [[https://examples.javacodegeeks.com/enterprise-java/spring/batch/spring-batch-commandlinejobrunner-example/|Spring Batch CommandLineJobRunner Example]] Spring Boot + Batch CommandLineJobRunner 예제
* Spring Boot와 연동시에는 ''botJar'' 를 변경해주면 된다.
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