====== 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