출처
목차
JobParameter
Job 을 실행할 때 함께 포함돼 사용되는 파라미터를 가진 도메인 객체
- 하나의 Job 에 존재할 수 있는 여러개의 JobInstancee 를 구분하기 위한 용도
- JobParameter 와 JobInstance 는 1:1 관계다.
JobParameter 생성 방법
BATCH_JOB_EXECUTION_PARAM 테이블과 매핑된다.
- 어플리케이션 실행 시 주입
- Java -jar LogBatch.jar requestDate=20220101
- 코드로 실행
- JobParameterBuilder, DefaultJobParametersConverter
- SpEL 이용
- @Value(“#{jobParameter[requestDate]}”), @JobScopre, @StepScope 선언 필수
- 외부에서 전달하는 값이 표현식에 전달돼 저장된다.
@Component public class JobParameterTest implements ApplicationRunner {
@Autowired JobLauncher jobLauncher;
@Autowired Job job;
@Override public void run(ApplicationArguments args) throws Exception {
JobParameters jobParameters = new JobParametersBuilder().addString("name", "user1") .addString("name", "user1") .addLong("seq", 1L) .addDate("date", new Date()) .addDouble("age", 16.5) .toJobParameters();
jobLauncher.run(job, jobParameters); } }
|
- StepContribution 클래스내 StepExecution 클래스내 JobExecution 클래스에서 JobParameters 객체를 관리한다.
- ChunkContext 클래스를 통해서는 Map 객체 로 JobParameters 를 얻어올 수 있다.
- JobParameters 객체에서 Type 별로 Key 값을 주면 Value 를 얻을 수 있다.
@RequiredArgsConstructor @Configuration public class JobParameterConfiguration {
private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory;
@Bean public Job BatchJob() { return this.jobBuilderFactory.get("Job") .start(step1()) .next(step2()) .build(); }
@Bean public Step step1() { return stepBuilderFactory.get("step1") .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
JobParameters jobParameters = contribution.getStepExecution().getJobParameters(); String name = jobParameters.getString("name"); long seq = jobParameters.getLong("seq"); Date date = jobParameters.getDate("date");
System.out.println("==========================="); System.out.println("name:" + name); System.out.println("seq: " + seq); System.out.println("date: " + date); System.out.println("===========================");
Map<String, Object> jobParameters2 = chunkContext.getStepContext().getJobParameters(); String name2 = (String)jobParameters2.get("name"); long seq2 = (long)jobParameters2.get("seq");
System.out.println("step1 has executed"); return RepeatStatus.FINISHED; } }) .build(); } @Bean public Step step2() { return stepBuilderFactory.get("step2") .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { System.out.println("step1 has executed"); return RepeatStatus.FINISHED; } }) .build(); } }
|