개나소나고생
7k
2020-06-03 00:06:00
3
539

Spring Boot 환경 배치 프로그램 개발 문의


안녕하세요. Spring Boot환경에서 Quartz와 Spring Batch를 이용해

배치 프로그램을 개발 중에 있습니다.

배치 프로그램 환경은 아래와 같습니다.

개발 환경 : Spring Boot + Quartz 라이브러리 + Spring Batch 라이브러리 

위 환경 기준으로 개발 진행 시 부딪히는 문제들이 너무 많아서 몇 가지 사항들에 대해서 의견을 구하고자 합니다.

1.Quartz 스케줄러를 이용해 Spring Batch Job을 실행할 경우 동일한 파라메터 값을 넘겨서 실행 할 수 없나요? 동일한 파라메터 실행 시 오류 메시지는 다음과 같습니다.

오류메시지 : A job instance already exists and is complete for parameters...(생략)If you want to run this job again, change the parameters.

2. Job 실행 시 DB를 활용해 Job배치 수행 데이터가 변경에 대한 이력을 남기고 싶은데요. Job에 대한 이력 관리 시 어떤 방식으로 많이들 추천하는지 궁금합니다.

3.ItemReader를 이용해 데이터를 가져올 경우 프로시저를 활용하고자 하는데 데이터를 가져올때 chunkSize때문이라도 무조건 페이징 쿼리 포함된 쿼리를 수행해야 하는지 궁금합니다.

4. 배치 Job에 대한 수행 관리를 Quartz를 통해 하시는지 아니면 별개로 관리하는지 궁금합니다.

0
  • 답변 3

  • fx
    1k
    2020-06-03 00:42:51

    1. https://okky.kr/article/707006?note=1959836   참고해주시고요

    2. 잘 모르겠습니다.

    3. cursor item reader도 있습니다. cursor를 사용해도 chunk 단위로 커밋됩니다.

    4. 보통은 별개로 관리하는 것 같습니다.  Quartz를 사용하기도 했습니다.


  • juniq
    97
    2020-06-03 08:10:36

    jojoldu 님 블로그에 spring batch 관련 자세한 설명이 기록되어잇어요

  • 블레이크
    1k
    2020-06-03 09:41:16

    1. 동일한 파라미터라는것 자체가 이미 수행한 배치를 의미하는 것이기 때문에 재실행이 안됩니다.  파라미터를 바꾸던가해야 됩니다.

    2. 스프링 배치 자체에 메타 테이블을 관리합니다.  당연히 자동으로 이력이 남습니다.  메타 테이블은 외부 테이블을 쓸 수도 있습니다.

    3. 스프링 부트단에서 알아서 chunk 를 쓰기 때문에 쿼리에 페이징을 하거나 할 필요가 없습니다.  만약에 쿼리애서 페이지 처리를 해야되면면 chunk 라는 개념이 필요하지가 않겠죠.

    4. 쿼츠는 두가지인데, 하나는 스프링 배치에 포함되어 있는 라이브러리 개념의 쿼츠가 있고, 쿼츠 프레임워크라고 해서 별도의 프레임워크가 따로 있습니다.  저는 스프링 배치에 있는 쿼츠를 써서 자체적으로 스케쥴링을 했는데, 배치에 rest api 를 접목해서, Control-M 같은 외부 스케쥴러에서 배치를 콜하는 방식을 쓰기도 합니다.

    관리나 개발은 두번째 방식이 편합니다.  자체적으로 스케쥴러를 쓰는 경우는 chunk 쓰다가 꼬이기도 하고...  좀 불편하더군요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.