jobLauncher.run(job,jobParameters); // 2. Job Launcher가 주어진 Job과 Job Parameter를 받아서 Job을 실행합니다. } }
Job Instance
Job이 실행될떄 생성되는 Job의 논리적 실행 단위 객체. 즉 작업 실행을 의미한다.
Job과 JobInstance는 왜 구분해야 할까?
Job의 설정과 구성은 동일하지만 Job이 실행되는 시점에 처리하는 내용은 다르기 때문에 Job의 실행을 구분해야 합니다.
JobInstance는 Job과 JobParameter의 조합으로 생성하며, 처음 시작하는 Job과 Job Parameter의 경우는 새로운 Job Instance를 생성합니다.
하나의 Job은 여러번 실행될 수 있으므로 Job과 JobInstance의 연관관계는 1:N의 관계입니다.
BATCH_JOB_INSTANCE 테이블에 매핑됩니다.
JobInstance의 경우 동일한 Job과 Job Parameter의 조합인 경우 예외(JobInstanceAlreadyCompleteException)를 던집니다.즉 동일한 Job을 동일한 Job Parameter로 돌리면 중복 JobInstance로 판정됩니다.
1 2 3 4 5 6
Caused by: org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException: A job instance already exists and is complete for parameters={name=user1}. If you want to run this job again, change the parameters. at org.springframework.batch.core.repository.support.SimpleJobRepository.createJobExecution(SimpleJobRepository.java:139) ~[spring-batch-core-4.3.9.jar:4.3.9] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
Job Parameter
말그대로 Job을 실행할 때 함께 포함되어 사용되는 parameter 가진 도메인 객체입니다
하나의 Job안에 존재하는 여러 JobInstance를 구분하기 위한 용도이다. 즉 JobInstance와 JobParameter는 1:1 관계입니다. (테이블 관계에서는 1:N)
BATCH_JOB_EXECUTION_PARAM 테이블과 매핑됩니다.
Spring Batch에서는 STRING, DATE, LONG, DOUBLE 타입을 지원을 하며, BATCH_JOB_EXECUTION_PARAM 테이블에서 타입별로 칼럼을 가지고 있습니다.
Job Parameter 생성방식
Application 생성 시점에 외부 환경변수로 주입되는 방법
빌드한 Jar파일에 다음과 같이 외부 매개변수로 KEY-VALUE 형태로 값을 주입해줄 수 있다. 이떄 문자형이 아닌 경우는 별도로 (타입명)을 지정해주어야 합니다. 혹은 program argument로 key=value형태로 넣어줄 수 있습니다.
Job Instance에 대한 한번의 시도를 의미하는 객체로서 Job 실행 중에 발생한 정보들을 저장하고 있는 객체입니다
즉 Job Instance와 Job Execution은 1:N의 관계입니다. (한번의 Job Instance가 여러번 실행될 수 있음으로)
작업 시작시간, 작업 종료시간, 작업의 실행 결과 상태값(시작/완료/실패/종료)속성을 가집니다.
Job Execution 의 상태 결과가 COMPLETED 라면 Job Instance의 실행이 완료된것으로 간주하여 재실행이 불가능합니다. (JobInstanceAlreadyCompleteException예외가 던져집니다.)
Job Execution 의 상태 결과가 FAILED 라면 COMPLETED가 될떄까지 하나의 Job Instance를 여러번 재실행할 수 있습니다. (동일한 Job parameter라도 재시작이 가능합니다, 재실행될떄마다 BATCH_JOB_EXECUTION_PARAMS 테이블에 Job parameter 정보가 누적됩니다)