Java-Bom / ReadingRecord

📚 책 읽고 정리하기 📚
https://javabom.tistory.com/category/Reading%20Record
473 stars 27 forks source link

[4장] incrementer #244

Closed jyami-kim closed 3 years ago

jyami-kim commented 3 years ago

p.113 RunIdIncrementer를 적용하려면 잡 구성 작업 외에 추가 구성이 필요하다. 또한 RunIdIncrementer를 도입하면서 새로 추가해야하는 JobParametersValidator에 추가해야한다

질문 : 왜 jobParameterValidator에 run.id를 추가해야하나요? 어차피 Optional parameter를 넣는 곳에 들어가는거 같고 어차피 run.id면 내부 값인데.. run.id가 안들어갈 경우의 방어코드가 batch 코드 상에 없나 뭔가 의문이든달까ㅋㅋㅋ

따라서 결론은 안할경우 에러메시지가 어떤식으로 메세지가 나오는지 코드 예시 부탁합니다

csbsjy commented 3 years ago

내용대로 optional 파라미터에 넣어주어야 하는게 맞고

@Bean
    public DefaultJobParametersValidator defaultJobParametersValidator() {
//      return new DefaultJobParametersValidator(new String[] {"name"}, new String[] {"date", "run.id", "timestamp"});
        return new DefaultJobParametersValidator(new String[] {"name"}, new String[] {"date", "timestamp"});
    }

넣어주지 않으면 아래같은 Exception 이 나 image

우선 nextParameters를 넣어주는건 Runner에서 다음 코드에서 run.id 를 job parameters 에 넣어줘 JobLauncherApplicationRunner image

그리고 validator는 JobParameters 가 필수값 또는 optional 값인지를 아래에서 체크하고있어 DefaultJobParametersValidator image

run.id 가 내부값이고 방어코드가 코드상에 없나 라는 의문은 잘 이해가 안되지만 넣어주는 Runner 와 검증해주는 Validation이 순서대로 동작하는거지 서로 의존하는 관계가 아니니까 방어적으로 코드를 짜긴 힘들었던게 아닐까 ?.? incremental 같은 경우는 CommandLineLauncher 내부에서만 값을 넣어주는거라 JobLauncher 를 사용하는 우리 테스트코드에서는 해당 기능이 동작하지 않거든, 그래서 모든 Runner나 Launcher 에서 Incremental 관련 파라미터를 넣어준다고 보장할 수가 없기 때문에 validation 에서 해당 방어코드를 넣는게 힘들지 않았나 싶넹