인프런 커뮤니티 질문&답변

Tommy님의 프로필 이미지
Tommy

작성한 질문수

[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch

일단 실행 - Hello, World (스프링 배치 구조 익히기)

Run / Debug 관련 질문드립니다..!

작성

·

741

1

앞선 질문 보고 다음과 같이 추가를 한 상황인데 Hello World Spring Batch 구문이 실행이 되지 않아 질문을 드립니다..!

혹시 제가 잘못 설정한 부분이 있는 걸까요?

답변 2

0

Tommy님의 프로필 이미지
Tommy
질문자

아 제가 깜빡하고 git 주소를 안남겨 놓았네요..!

https://github.com/BeomSeogKim/BackendStudy/tree/main/SpringBatch

입니다.

스프링 시작점에 @EnableBatchProcessing 어노테이션 등록은 한 상태입니다!

한번 확인 부탁드릴게요 감사합니다.

MJ코딩님의 프로필 이미지
MJ코딩
지식공유자

Tommy님 안녕하세요 :)
알려주신 소스 코드를 제 로컬에서 실행을 해보니 정상적으로 동작을 하여, 코드에는 문제가 없는 것 같아요!!
이 2라인[0]을 주석 처리하고 hello world가 보이는지 확인을 해주실 수 있을까요?
2라인 코드를 주석처리를 하시면 인자 없이 job에 등록된 배치 작업이 실행이 될텐데요. 잡이 정상적으로 실행이 되는지 확인을 해볼게요.
job에 정상적으로 등록이 되었다면, 알려주신 코드 기반으로 argument를 위에 처럼 넘겨 주시면 정상적으로 동작을 해야 되겠습니다😢
혹시, 저때 실행을 할 때와 위에서 알려주신 소스코드가 다를 수도 있을까요?

[0]
https://github.com/BeomSeogKim/BackendStudy/blob/main/SpringBatch/src/main/resources/application.yml#L3-L4

 

Tommy님의 프로필 이미지
Tommy
질문자

yaml 파일에서 주석처리 되지 않은 것이 문제였군요

해결했습니다.

감사합니다 선생님!

MJ코딩님의 프로필 이미지
MJ코딩
지식공유자

저 부분의 주석처리가 되어 있다면, (인자와 상관 없이) 등록된 job이 모두 실행이 돼요.
하지만 해당 job만 실행을 시키기 위해서는 위에 yaml에 코드가 포함이 되어 있어야 해요. 이때 job 이름을 인자로 넘겨주면서 해당 job만 실행이 되겠습니다.
주석처리가 되어 있는 상태에서 실행이 된다면 job은 잘 등록이 되어 있고, 해당 코드도 제가 실행 했을 때 정상적으로 동작함을 봤을 때, 해당 job 인자가 정상적으로 넘어가지 않는 것으로 생각이 됩니다 ㅠ.ㅠ

Tommy님의 프로필 이미지
Tommy
질문자

안녕하세요 선생님

그동안 다른일로 바빠 이제야 다시 도전해보고 있습니다..!

Run/Debug configuration은 다음과 같이 설정을 해두었습니다.

image추가적으로

yaml 설정에서

job:names에 ${job.name:helloWorldJob} 을 넣었을 땐 정상적으로 Hello World가 출력되며

job:names에 ${job.name:NONE} 을 넣었을 땐 출력이 되지 않네요..!

 


추가적으로 뒤에 validator때에도 fileName이 잘 적용되질 않는 것 같아서

jar file을 build한 후

java -jar {Spring jar 파일} --spring.batch.job.names=helloWorldJob 으로 실행을 해도 무방할까요?

MJ코딩님의 프로필 이미지
MJ코딩
지식공유자

Tommy님 안녕하세요 :)
인텔리제이 버전까지는 동일하지 않아서 혹시 옵션 입력을 해주신 칸이 Program Arguments 칸이 맞겠지요?
해볼 수 있는 2가지를 시도해볼게요.

  1. 옵션을 --job.name=helloWorldJob으로 변경을 해서 시도를 해주실 수 있으실까요?

  2. 다른 하나는 명령어로 직접 수행을 해볼게요. (인텔리제이에서 인자를 제대로 못받고 있는 것으로 판단이 돼요.)

    1. 화면의 오른쪽 상단 Gradle 클릭 -> Tasks -> build -> jar 클릭하여 jar 직접 생성

    2. 디렉토리 build/libs 위치에 Batch-0.0.1-SNAPSHOT.jar 파일 확인 및 해당 위치로 이동

    3. java -jar Batch-0.0.1-SNAPSHOT.jar --spring.batch.job.names=helloWorldJob
      명령어 직접 수행

제 환경에서는 제대로 동작을 하고 있어, 인텔리제이에서 인자를 제대로 못 받고 있는 것으로 생각이 돼요. 위에 2가지에 대해서 시도를 해볼 수 있겠습니다.
감사합니다.

Tommy님의 프로필 이미지
Tommy
질문자

image혹시 여기서 실행을 할때

Recent Configurations 목록들에서

{1} spring.batch.SpringBatchApplication

{2} SpringBatchApplication

{2] 가 아닌 {1}을 실행하면 되는 것일까요?

test를 해본결과 {1} 을 실행 했을 때에는 정상 작동하는 것을 확인했습니다.

주말인데 빠른 답변 진심으로 감사드립니다.

MJ코딩님의 프로필 이미지
MJ코딩
지식공유자

화면을 봤을 때는 1번은 어플리케이션을 실행하고, 2번은 스프링 부트를 실행하는 모습인 것 같아요. 툴에서 어플리케이션을 시작하는 시작점이 다른 것 같습니다.
문제가 해결되어 다행입니다😀
시원스럽게 답변을 드리지 못한 점 죄송하며, 혹시나 문제가 또 발생을 한다면 같이 고민을 하도록 하겠습니다 :)

0

MJ코딩님의 프로필 이미지
MJ코딩
지식공유자

Tommy 님 안녕하세요 :)
Github를 통해서 코드를 직접볼 수 있으면 조금 더 정확하게 확인이 가능할텐데요ㅠ.ㅠ
짐작으로는 스프링 시작점의 @EnableBatchProcessing 어노테이션도 추가를 해주셨을까요?
시작점 코드는 아래 링크[0]에서 확인을 하실 수 있어요.

[0]
https://github.com/junngo/spring-batch-tutorial/commit/3a4a1e85ad17e87acb56e5037bf1cdfe31920987#diff-2fe19cf8ea603a3c547a795ec1ee397bd3f4d48c91e04ccf288e5114171919b1R7

Tommy님의 프로필 이미지
Tommy

작성한 질문수

질문하기