repository를 통한 job을 만들어 보자. 목표 1. findAll로 데이터 모두 불러와서 2. 각 row를 수정 3. 각 row를 save로 저장(update) @Configuration public class ImportJob { @Autowired private JobBuilderFactory jobBuilderFactory; @Autowired private StepBuilderFactory stepBuilderFactory; } @Repository public interface BookRepository extends JpaRepository{ } 1. findAll로 데이터 모두 불러와서 ........... @Bean public Job job() throws Exception { ..
(p246) StepBuilder에 .allowStartIfComplete(true) 추가 ......... @Bean public Step importStep01() throws Exception { return this.stepBuilderFactory.get("importStep01") .chunk(100) .reader(importReader01(null)) .processor(importProcessor01()) .writer(importWriter01(null)) .allowStartIfComplete(true) .build(); } ......... Job의 ExitStatus가 COMPLETE라면 Job 인스턴스를 다시 실행할 수 없다.
참고: 스프링배치 완벽가이드 2/e, 마이클 미넬라 지음 (p206~214) @RequestMapping으로 url등록하고 method 안에서 job을 호출 @RestController public class TestController { @Autowired private JobLauncher jobLauncher; @Autowired private ApplicationContext context; @RequestMapping(value = "/batch") public ExitStatus test() throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParameter..
참고: 스프링배치 완벽가이드 2/e, 마이클 미넬라 지음 (p204~214) 이거 왜 할랬는데? 책보면서 job, step 작성 후, 작성한 job 실행하는 방법이 1. IDE에서 서버를 껏다 키던가, 2. build후, jar 파일을 terminal에서 실행(IDE에서 서버 키는거랑 똑같음) 근데 서버 재기동 할때마다 여러 job들이 실행되면 곤란하니까, 원하는 시간 or 특정 이벤트 호출 시 job이 실행했으면 했다. 목표 서버 재기동 시, job실행을 막을꺼임. 방법 // application.properties # 애플리케이션이 기동되는 시점에서 배치 job이 실행되지 않음 spring.batch.job.enabled=false 기본값은 true 수정 후엔 자동 재시동 말고 서버를 완전히 껏다가 ..
특정 method를 주기적으로 실행시키려면? Spring batch가 필요할줄 알고 회사에서 spring batch관련 책을 사달래서 읽어봤다.. 읽어봤는데.. quartz를 이용해서 서버 시작하면서 n초 간격으로 m번 반복하는 내용이 있었다. 나는 특정 시간(ex. 매일 새벽 2시)마다 실행시켜야 했다. 구글링 해보니 @Scheduled 이라는 annotation이 있었다. @Scheduled 특정 method위에 @Scheduled 과 함께, cron, fixedDelay, fixedRate로 실행 주기를 설정 할 수 있다. ex. 매일 새벽 2시는 @Scheduled(cron = "0 2 * * *") @Scheduled가 적용되려면 다음과 같은 조건이 필요함. 1. @EnableScheduling..