[Spring Batch] 배치 처리 : 실행 및 스케쥴

2024. 9. 18. 13:39프로그래밍(Backend)/Spring Batch

jobLauncher 및 실행 변수

private final JobLauncher jobLauncher;
private final JobRegistry jobRegistry;
JobParameters jobParameters = new JobParametersBuilder()
        .addString("date",value)
        .toJobParameters();

jobLauncher.run(jobRegistry.getJob("firstJob"), jobParameters);

 

1. 컨트롤러에서 실행

@RestController
@RequiredArgsConstructor
public class MainController {

    private final JobLauncher jobLauncher;
    private final JobRegistry jobRegistry;

    @GetMapping("/first")
    public String firstApi(@RequestParam String value) throws Exception {

        JobParameters jobParameters = new JobParametersBuilder()
                .addString("date",value)
                .toJobParameters();

        jobLauncher.run(jobRegistry.getJob("firstJob"), jobParameters);

        return "ok";
    }
}

 

컨트롤러에서 Get 요청을 통해 Job을 실행

localhost:8080/first?value={파라미터}로 Get요청을 받으면 해당 로직이 실행된다.

파라미터 값이 존재하면 실행하지 않고 존재하지 않다면 실행된다. 이를 통해 똑같은 작업을 반복하지 않도록 방지

 

파라미터 값 c로 요청하고 ok를 반환

value=c를 확인할 수 있고 beforeEntity -> afterEntity로 데이터 이동 SQL문을 확인할 수 있다.\

afterentity로 이동 확인

파라미터 c로 요청을 한 다음 다시 요청을 보내면 에러 페이지가 반환된다.

 

2. 스케쥴로 실행

 

@SpringBootApplication
// Scheduling 활성화
@EnableScheduling
public class SpringBatchPracticeApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBatchPracticeApplication.class, args);
    }

}

 

스케쥴러로 실행을 하기 위해 Application 클래스에 @EnableScheduling 어노테이션을 통해 활성화를 시켜야한다.

@Configuration
@RequiredArgsConstructor
public class firstSchedule {

    private final JobLauncher jobLauncher;
    private final JobRegistry jobRegistry;

    @Scheduled(cron = "10 * * * * *", zone = "Asia/Seoul")
    public void runFirstJob() throws Exception {

        System.out.println("first schedule start");

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = dateFormat.format(new Date());

        JobParameters jobParameters = new JobParametersBuilder()
                .addString("date", date)
                .toJobParameters();

        jobLauncher.run(jobRegistry.getJob("firstJob"), jobParameters);

    }

}

 

위의 스케쥴 클래스를 생성하여 매분 10초에 스케쥴이 실행되게 작성

36분 47초에 어플리케이션이 실행 되었기 때문에

37분 10초에 작업이 실행 되어야한다.

 

37분 10초에 동작 확인.

 

추가로 스케쥴 클래스에도 JobParameters를 통해 같은 동작이 실행되지 않도록 처리할 필요가 있다.