Job 실행 관련 프로퍼티

  1. spring.batch.job.enabled : application context 에 등록된 Job 을 실행을 활성화하는 프로퍼티
    1. true (default) : Job 을 실행 가능하도록 활성화 / false : 모든 Job 을 실행 불가능하도록 설정
  2. spring.batch.job.name : 실행할 배치 Job 을 job name 을 기준을 기반으로 선언
    1. spring.batch.job.name=
      • 값이 없으면 모든 잡을 실행 (spring batch 5.x 부터 exception 반환하며 실행하지 않음.)
    2. spring.batch.job.name=jobName1
      • jobName1 이름의 잡만 실행하겠다는 의미
    3. spring.batch.job.name=jobName1,jobName2
      • spring batch 4.x : 해당 job name 의 multiple batch job 을 실행
      • spring batch 5.x : multiple batch job 을 제공하지 않아 IllegalArgumentException 발생
    4. spring.batch.job.name=${job.name:NONE}
      1. spring.batch.job.name 에 값이 없으면 모든 잡 실행
      2. ${job.name:NONE} : job.name 이 존재하면 특정 잡만 실행하고, job.name 에 값이 없으면 실행하지 않게 설정

 

Spring Batch Job test argument 설정 방법

  • @SpringBootTest 의 args option 활용
@SpringBatchTest
@SpringBootTest(args = "--job.name=memberDeleteJob")
public class MemberBatchTest {

	@Autowired
	private JobLauncherTestUtils jobLauncherTestUtils;

	@Autowired
	private JobRepositoryTestUtils jobRepositoryTestUtils;

	@AfterEach
	public void cleanUp() {
		jobRepositoryTestUtils.removeJobExecutions();
	}

	@Test
	public void testJob(@Autowired @Qualifier("memberDeleteJob") Job job) throws Exception {
		this.jobLauncherTestUtils.setJob(job);
		JobExecution jobExecution = jobLauncherTestUtils.launchJob();

		Assertions.assertThat(jobExecution.getExitStatus().getExitCode()).isEqualTo(ExitStatus.COMPLETED.getExitCode());
	}

}

 

@JobScope, @StepScope

  1. Scope
    1. 스프링 컨테이너에서 빈이 관리되는 범위
    2. singleton, prototype, request, sessino, application 이 존재하며 기본은 singleton.
  2. @JobScope , @StepScope
    1. Job 과 Step 의 빈 생성과 실행에 관여하는 스코프
    2. proxy 모드로 기본 값으로 하는 스코프
  3. @JobScope
    • Step 선언문에 정의한다.
    • @Value : jobParameter, jobExecutionContext 만 사용 가능
  4. @StepScope
    • Tasklet 이나 ItemReader, ItemWriter, ItemProcessor 선언문에 정의한다.
    • @Value : jobParameter, jobExecutionContext, stepExecutionContext 사용 가능

 

Reference

  1. spring batch 특정
  2. spring.batch.job.name
  3. spring batch test