월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 배치
apiJob부터 가져오는 정보가 null로 나오면서 찾을 수 없습니다.
fileJobConfiguration에서는 정상적으로 데이터가 product에 적재됩니다. 하지만 다음 apiJob을 통해 실행시키면 (--job.name=apiJob requestDate=20220121) ApiStepConfiguration에서 itemReader 실행과정중에 AbstractStep에서 catch구문으로 접근하면서 아래와 같이 발생합니다. api연동하기전에 먼저 발생한거여서 다음 강의를 쫓아갈수가 없네요 ㅠㅠ 진행상황 : ProductVO[] productList = QueryGenerator.getProductList(dataSource); 를 통해 type 사이즈 3개는 정상적으로 가져옴. itemReader에서 id, name, price는 모두 null이라서 그런건지... 강의에서는 저부분은 무시했던거 같아서요.
- 미해결스프링 배치
청크프로세스 조건별로 끝내는 방법
안녕하세요 tasket이 아니고 청크프로세스로 테스트를 하고있는데 해당일이 휴일이면 배치를 실행안되게끔하려고 하는데 구현 방법이 있는지요? 제일 처음 일자는 입력받고 일자가 휴일이면 그냥 종료하고 휴일이 아니면 배치를 실행시키려고 합니다. 아니면 그냥 system.exit를 해도 되는지 궁금합니다. 정상종료 시키려합니다. 휴일이면 system.exit 이렇게 할수있는 명령어가 있는지요? job/ step/ reader 소스 첨가 합니다. @Bean public Job job() throws Exception { return jobBuilderFactory.get(JOB_NAME) .incrementer(new RunIdIncrementer()) .listener(new JobResponseListener()) .start(autoBillPayResponseStep()) .build(); } 위는 잡이고 아래는 아이템 리더인데요 ^^ 휴일인경우에는 그냥 완료 시키고 싶어요 ^^ @Bean @JobScope public Step autoBillPayResponseStep() throws Exception { // TODO Auto-generated method stub return stepBuilderFactory.get("autoBillResponseStep") .<AutoBillPayResponseDto, Future<AutoBillPayResponseDto>>chunk(CHUNK_SIZE) .reader(listItemReader(null,null,null)) .processor(asyncItemProcessor(null)) .writer(asyncItemWriter(null)) .build(); } @Bean @StepScope public ListItemReader<AutoBillPayResponseDto> listItemReader(AutoBillPayResponseDao autoBillPayResponseDao, @Value("#{jobParameters[toDate]}") String toDate, @Value("#{jobParameters[guBun]}") String guBun) { // TODO Auto-generated method stub String baseDay = autoBillPayResponseDao.findByPreWorkDay(toDate); List<AutoBillPayResponseDto> autoBillPayResponseDto = autoBillPayResponseDao.findBillPayResponse(baseDay, guBun); return new ListItemReader<>(autoBillPayResponseDto); }
- 미해결스프링 배치
SQL 파일
안녕하세요. 강사님 sql 파일도 git에 올려주시면 안 될까요? 감사합니다.
- 미해결스프링 배치
taskExecutor실행시 종료안되는 문제해결방법
밑에 질문에도 있는 내용인데 taskExecutor빈 안에 taskExecutor.setDaemon(true); 추가하면 배치프로그램 종료할수있는것같네요
- 미해결스프링 배치
mysql driver class 오류 문의 드립니다.
안녕하세요 강의 따라하는데 Failed to determine a suitable driver class 발생해서 원인을 찾고 있습니다. 혹시 application.yml 파일을 복사해서 따라해보고 싶은데 코드를 확인할 수 있는 git 주소가 있을까요?
- 미해결스프링 배치
실습 중에 궁금 한게 있습니다.
실습 중에 같은 job을 여러 번 실행 하실때 내부스텝 부분만 수정해서 실행 하시던데 같은 완료된 같은 job은 여러번 실행 못하는 걸로 알고 있습니다. 소스 참고 해보려고 하는데 섹션별로 git에 어느 branch로 찾아 가면 되는지 모르 겠습니다.
- 미해결스프링 배치
step endtime 질문
안녕하세요. 간단하게 질문이 있습니다. StepExecutionListener의 afterStep 메서드에서 StepExecution의 endTime을 가져왔는데 null로 찍히는데 왜 null로 찍히는 건가요?? afterStep이니까 Step이 끝난 상태에서 동작하기 때문에 endTime이 찍힐 줄 알았는데 null이 찍혀서 궁금하여 질문드립니다.
- 미해결스프링 배치
ThreadPoolTaskExecutor 여러 Job 실행 시 대기 처리
안녕하세요, 강사님 @Slf4j@RequiredArgsConstructor@Configuration@EnableBatchProcessingpublic class BatchConfig extends DefaultBatchConfigurer { @Override public JobLauncher createJobLauncher() throws Exception { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(1); taskExecutor.setMaxPoolSize(2); taskExecutor.setQueueCapacity(500); taskExecutor.afterPropertiesSet(); SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); jobLauncher.setTaskExecutor(taskExecutor); jobLauncher.setJobRepository(createJobRepository()); jobLauncher.afterPropertiesSet(); return jobLauncher; }//...} 공통으로 Job 관리할때는 JobLauncher에 ThreadPoolTaskExecutor을 등록해서 대기작업을 했습니다. 만약 엑셀 가져오기(업로드), 통계배치 등 배치Job 종류가 여러개이고 따로 관리해야할때, 엑셀 pool 2개, 통계배치pool 1개 이렇게 따로 pool 을 만들고 싶다면, 어떻게 해야할까요? Job 종류 마다 JobLauncher 을 여러개 만들어야 하는건가요? pool 개수 이상에 요청이 들어오면 대기상태였다가 앞의 배치 작업 끝나면 실행시키는 방식을 생각하고 있습니다. ex. 엑셀 pool 2개, 통계배치pool 1개 일 경우 엑셀가져오기 작업 요청이 3번 들어오면 앞의 두 작업은 실행되고 나머지 하나는 대기상태. 동시에 다른 통계배치작업 요청이 2번 들어오면 앞의 한 작업은 실행되고 나머지 하나는 대기상태.
- 미해결스프링 배치
비동기식으로 jobLauncher 실행시키는 것 관련 질문 드립니다.
제목과 같이 비동기식으로 jobLauncher 실행시키는 것 관련 질문 드립니다. 비동기식으로 job 실행할 경우 basicBatchConfigurer 내에 있는 SimpleJobLauncher 실물을 불러와 비동기 설정을 해주기에 비동기식 실행이 가능해진다고 하셨는데요. 이 경우 비동기식으로 잡을 한 번 실행하게되면 빈으로 설정된 jobLauncher 가 다시 동기식으로 바꿔주지 않는 이상 비동기식으로 설정되어있어 비동기식 설정이 들어가지 않은 메서드를 별도 지정해서 돌려도 비동기식으로 돌아가는 듯 합니다. 혹시 제가 파악한게 맞을까요?!
- 미해결스프링 배치
오타
안녕하세요 강의 후반부에 실습과정에서 JdbcBatchItemWriter에서는 name이 없다고 말씀해주시는데 4분 13초에 나오는 ppt에는 name API가 추가되어 있습니다. 좋은 강의 감사드립니다!
- 미해결스프링 배치
fetchSize 관련 질문
안녕하세요! fetchSize에 관련하여 질문이 있습니다. Cursor기반에서 설명해주신 부분을 이해한 바로는 Cursor기반은 기본적으로 데이터를 하나씩 가져오는데 fetchSize를 사용하면 해당 fetSize크기만큼 한번에 땡겨올 수 있다 정도로 이해했습니다. 10:34 초에 보면 Paging기반인데도 fetchSize를 사용하고 있는 부분이 있어서 다소 혼동되어 질문드리게 되었습니다. Paging기반은 애초에 PageSize만큼 데이터를 땡겨오는데 fetchSize를 사용하는 이유가 뭔가요?
- 미해결스프링 배치
커서 기반 커넥션 질문
안녕하세요! 간단하게 궁금한 점이 있습니다. 데이터가 총 100개 있고 청크 사이크가 10으로 잡아서 작업을 처리한다고 가정했을 때 커서기반이 커넥션을 계속 물고 있다는 의미는 100개가 모두 처리될 때까지 끊지 않고 계속 물고 있다는 의미인가요 ?
- 미해결스프링 배치
CustomerItemReader 소스 중
안녕하세요. 강사님 CustomerItemReader 소스를 코딩 하는 중 list.remove(0) 가 null이 나와서 확인해보니 강사님은 this.list = new ArrayList<>(list); 이렇게 코딩하셨고,저는 this.list = list 이렇게 코딩을 했더라고요. 그런데 디버깅을 해보면 this.list = list 이렇게 해도 동일하게 list에 값이 있고 list.get(0)도 접근이 됩니다. 왜 remove 만 안 되는 걸까요? 그리고 ListItemReader 클래스를 보면 proxy 여부를 체크하는 이유는 뭔지 궁금합니다. 감사합니다.
- 미해결스프링 배치
SimpleLimitExceptionHandler()를 Bean으로 만들어야 하는 이유가 뭔가요?
Repeat강의에서 SimpleLimitExceptionHandler를 설명해주실 때(43:29), setExceptionHandler()에 SimpleLimitExceptionHandler객체를 Bean으로 만들어서 넣어줘야 정상 동작을 한다고 설명을 해주셨는대요. Bean이 아닌 일반 객체로 넣어서, Process가 호출 될 때마다 새롭게 객체가 생성이 된다고 하더라도 limit이 3으로 들어가는건 변함이 없을 것 같은데, limit 이 0이 되는 이유가 잘 이해가 안되네요.
- 미해결스프링 배치
강사님 안녕하세요. 질문이 있어 글 남깁니다.
강사님 안녕하세요. 좋은 강의 감사드립니다. 다른 수업과 다르게 너무 알찼고 디버깅까지 직접 해주셔서 이해가 너무 잘되었습니다. ㅎㅎ 다름이 아니라 공부한 내용을 저의 개인 블로그에 기록을 해두고 싶은데 그 전에 미리 양해를 구하는게 맞겠다 싶어 글을 남기게 되었습니다. 링크는 다음과 같고 https://rere950303.github.io/spring/batch/batch/ 혹시 저작권 같은 문제가 있다면 바로 내리도록 하겠습니다.! 감사합니다.
- 미해결스프링 배치
두 번째 step를 호출할 때
안녕하세요. 강사님 강의 33:40 분에 '두번째 step를 호출할 때'라고 하셨는데 정확히 두번 step를 호출할 때가 어떤 의미인가요? step1(@Value(~)) 메서드 호출하는 시점에 한 번, stepBuilderFactory.get("step1")에서 두 번째인가요? 감사합니다.
- 미해결스프링 배치
JOB 상태값 관련 질문
안녕하세요 상태값 관련해서 질문이 있습니다. 18:07초에서 step2()가 COMPLETED 되어도 on에는 PASS만 정의되어 있기 때문에 step2의 ExitStatus가 PASS가 아니라면 Job의 BatchStatus와 ExitStatus는 FAILED로 된다고 설명해주셨는데요. 이에 관한 내용은 SimpleJob 부분에서 다뤄주신다고 하셨는데 뒤쪽에 언급이 없으셔서 질문 남기게 되었습니다. 강의 내용처럼 하게 되면 on에 PASS를 넣으면 말씀하신대로 JobExecution이 FAILED가 나옵니다. 설명해주신 맥락대로라면 step2의 on을 FAILED로 두고, step2를 COMPLETED 통과시킨다면 step2에 COMPLETED에 대한 내용은 flow는 정의하지 않았으니 JOB의 BatchStatus와 ExitStatus는 결과적으로는 FAILED가 되어야 하는데 DB를 보면 COMPLETED 상태로 표기되고 있습니다. 즉, 결과는 아래와 같습니다. on에 custom한 ExitStatus(PASS)를 적용하고 step의 ExitStatus를 COMPLETE로 보내면 JOB의 상태는 FAILED로 찍힌다. on에 custom하지 않은 ExitStatus(FAILED)를 적용하고 step의 ExitStatus를 COMPLETED로 보내면 JOB의 상태는 COMPLETED로 찍힌다. 그렇다면 결론적으로 Custom한 ExitStatus값만으로 on에 조건을 걸고 실행시 Step의 ExitStatus가 on조건에 매칭되지 않는다면 Job의 상태는 FAILED이고, 일반적인 ExitStatus값을 on에 조건을 걸고 실행 시 Step의 ExitStatus가 on조건에 매칭되지 않는다면 위의 custom처럼 FAILED가 아니라 해당 Step의 ExitStatus 값으로 Job의 상태가 업데이트 된다. 이렇게 나는데 잘 이해하고 있는게 맞을까요? @Configuration@RequiredArgsConstructorpublic class TestJobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean public Job helloJob() { return jobBuilderFactory.get("job") .start(step1()) .on("COMPLETED") .stop() .from(step1()) .on("*") .to(step2()) .on("FAILED") .stop() .end() .build(); } @Bean public Step step1() { return stepBuilderFactory.get("step1") .tasklet((contribution, chunkContext) -> { System.out.println("step1 completed"); contribution.setExitStatus(ExitStatus.FAILED); return RepeatStatus.FINISHED; }) .build(); } @Bean public Step step2() { return stepBuilderFactory.get("step2") .tasklet((contribution, chunkContext) -> { System.out.println("step2 completed"); return RepeatStatus.FINISHED; }) .build(); }
- 미해결스프링 배치
배치 작업 도중 실패할때
안녕하세요 강의 잘 보고있습니다. 데이터가 100개 있고, 청크 사이즈가 10이라고 할 때 0~9, 10 ~ 19 까지 성공하고 애플리케이션 문제 등으로 프로그램이 종료 혹은 실패가 되었을 때, 다시 0번부터 실행 안 하고, 20번 부터 실행을 하려면 어떻게 해야될까요? 몇번부터 몇번까지 실행했는지 기록하는 메타데이터용 테이블을 만들어서 기록해야되는 거 말고는 없나요?? (예를 들어 실패했을때 다시 실행하면, 실패한 곳부터 알아서 스프링 배치가 실행해주는..)
- 미해결스프링 배치
외부 오픈 api를 read 할때 동기화 문제에 대해 질문드립니다.
수업 중 궁금한점이 있어 질문 드립니다. 외부 api를 받아와서 db에 저장하는 작업을 하는 경우일때 listitemReader의 경우 멀티쓰레드 환경에서 동기화가 안되어 있는 것 같은데 이런경우는 멀티쓰레드에 안전한 custom reader를 직접 코딩 해야 하나요??? 미리 감사합니다.!!!!
- 미해결스프링 배치
jpa의 경우 벌크성 insert 지원이 안되나요???
jpa의 경우 bulk insert 가 지원되지 않는지 궁금합니다.