이 포스팅에서는 Simpel Job의 Start / Next가 어떻게 동작하는지를 코드 단위로 확인해보고자 한다.
Simple Job 코드 구성
Simple Job은 위처럼 코드를 구성해서 만든 후, 그것을 스프링 빈으로 등록해야지 SimpleJob Launcher에서 사용이 가능하다. 그렇다면 각 Simple Job을 만드는 코드 구성은 어떻게 되는 것인지 알아보려고 한다.
get()메서드를 타고 가본다. get 메서드에서는 매개변수로 주어진 name 값을 JobBuilder에 전달해준다. 그리고 그렇게 생성된 Job Builder를 반환해준다. 그렇다면 .start()부터는 jobBuilder.start()의 메서드로 되어있는 것을 알 수 있다.
start() 메서드로 SimpleJobBuilder를 만들고, 여기에 매개변수로 전달한 Step을 다시 한번 start() 메서드로 호출하는 것을 알 수 있다. 즉, simpleJobBuilder.start()로 한번 더 들어가는 것을 알 수 있다.
start 메서드를 한번 더 타고 들어가면, steps라는 필드에 전달받은 step을 추가하는 것을 볼 수 있다. 그렇다면 steps라는 필드의 값은 무엇일까?
SimpleJobBuilder를 살펴보면 내부 필드로 steps를 가지는데 Step 객체를 관리하는 ArrayList인 것을 확인할 수 있다. start()라는 메서드는 SimpleJobBuilder를 만들고, Builder의 steps 필드에 전달받은 Step을 추가하고 Builder를 반환한다.
next() 메서드를 확인해보면 start()와 유사하게 steps 내부 필드에 전달받은 Step을 전달하는 것을 볼 수 있다.
마지막으로 build() 메서드를 확인해본다. build 메서드는 SimpleJob을 만드는 것을 확인할 수 있다.
super.enhance 메서드를 타고 가보면 Builder 가지고 있던 properties를 바탕으로 생성된 Simple Job에 설정값을 전달해주는 것을 확인할 수 있다.
이후 만들어진 Job을 return 해주는 것을 확인할 수 있다.
Simple Job의 실행 → SimpleJobLauncher
SimpleJob은 SimpleJobLauncher를 통해서 실행된다. SimpleJobLauncher의 run 메서드를 통해서 실행이 되는데, 이 때 Simple Job과 Job Parameter들이 전달된다.
그리고 SimpleJobLauncher 내부에 있는 job.execute()를 통해 실제로 Job이 실행된다.
'Spring > Spring Batch' 카테고리의 다른 글
Spring Batch : Simple Job의 preventRestart() (0) | 2022.03.05 |
---|---|
Spring Batch : SimpleJob의 Validator (0) | 2022.03.05 |
Spring Batch : DB 스키마 Domain 정보 (0) | 2022.03.04 |
Spring Batch : 메타 데이터 저장을 위한 DB 스키마 (0) | 2022.03.04 |
Spring Batch : Job의 기본적인 구성, 사용 방법 (0) | 2022.03.04 |