inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

특정 job만 실행

247

ehddbs452100

작성한 질문수 15

1

해당 강의를 보고 jenkins를 이용해서 spring batch를 실행하려고합니다.

현재 application.yml은 아래와 같이 enabled: false로 해놓았습니다.

spring:
  batch:
    job:
      fail-on-job-failure: true
      enabled: false
    jdbc:
      initialize-schema: never

젠킨스의 파이프라인인데 파라미터 주입은 잘되었습니다. 그런데 job은 생성이 되었다고 로그가 찍히고 spring도 실행중인데 명시해놓은 job을 실행을 안하네요...

2025-03-08T12:51:30.900+09:00  INFO 5801 --- [           main] l.l.e.job.LostItemSearchJobConfig        : 🔵 Job 생성: dailyElasticStoreJob
2025-03-08T12:51:32.179+09:00  INFO 5801 --- [           main] l.l.LostNoMoreBatchApplication           : Started LostNoMoreBatchApplication in 13.915 seconds (process running for 15.394)
Ab
java -Duser.timezone=Asia/Seoul -jar /var/jenkins_home/LOST-NO-MORE.jar \\
                        --spring.batch.job.names=dailyElasticStoreJob \\
                        --spring.batch.job.parameters="START_DATE=${params.START_DATE},END_DATE=${params.END_DATE}"

application.yml에서 enabled: true로하고 job:name=dailyElasticStoreJob로하니깐 되고 어떤게 문제인지 모르겠습니다. 파이프라인은 문제가 없는데 자꾸 spring이 실행 중이고 job을 구동하지 않네요. 직접 JobLauncher를 이용해야하는 방법 밖에 없는 지 궁금합니다.

spring-boot spring-batch

답변 1

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

ehddbs452100님, 젠킨스에서 스프링 배치 작업을 실행하려고 할 때, application.yml에서 spring.batch.job.enabled: false로 설정한 경우, 스프링 배치가 시작 시점을 자동으로 실행하지 않습니다. 이 설정은 기본적으로 배치 작업의 자동 실행을 비활성화합니다.

현재 파이프라인 스크립트를 보면, 명령어에서 --spring.batch.job.names=dailyElasticStoreJob를 사용하여 특정 Job을 실행하도록 설정하고 있는데, 이 방법으로는 자동 실행이 설정되지 않을 경우 사용할 수 있는 대체 방법입니다.

하지만 자동 실행을 사용하지 않을 것이기 때문에 직접 JobLauncher를 사용해서 명시적으로 Job을 실행하는 방법을 고려해 볼 수 있습니다. JobLauncher를 통해 직접적으로 Job을 실행하는 코드를 작성하면, 수동으로 실행을 제어할 수 있습니다.

다음은 JobLauncher를 사용하는 간단한 예시입니다:

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class JobInvoker {
    
    @Autowired
    private JobLauncher jobLauncher;
    
    @Autowired
    private Job job; //실행하고자 하는 Job

    public void runJob() throws Exception {
        jobLauncher.run(
            job,
            new JobParametersBuilder()
                .addString("paramKey", "paramValue") // 필요한 매개변수 추가
                .toJobParameters()
        );
    }
}

해당 방법으로 스프링 실행 중임에도 불구하고(Job이 자동으로 실행되지 않는 경우) 특정 job을 명시적으로 수행할 수 있습니다. 또한, 이런 식으로 직접 제어할 경우, 배치 작업의 실행 시점을 좀 더 유연하게 관리할 수 있는 장점이 있습니다.

혹시 더 궁금하신 점이 있으면 언제든지 질문해 주세요!

Spring Boot Reference Documentation에서 더 많은 정보를 찾아볼 수 있습니다.

스프링 배치 버전 질문

0

119

1

소스코드가 어디에 있나요?

0

95

2

트랜잭션 예외

0

90

1

질문이 있습니다.

0

128

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

124

2

여러 JOB 설정하는법

0

148

2

강의 자료 다른 방법 있을까요?

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

185

2

Batch 성능 질문

0

151

1

ItemReaderAdapter 종료

0

78

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

178

2

Spring Batch 배포 질문

0

245

2

spring batch 버전

0

235

2

retry count 관련 질문

0

170

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

327

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

233

2

Multithread step과 AsyncItemProcessor

0

201

2

job 재실행

0

250

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

182

1

Multi-threaded-step과 Partitioning 차이 확인

0

171

2

jdbcCursorReader, jdbcPagingReader 질문

0

142

1

step muti-thread 질문

0

106

1

itemSteam open update close 질문

0

109

1

@JopScope, stepScope 지연 초기화 관련 질문

1

124

1