작성
·
27
·
수정됨
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를 이용해야하는 방법 밖에 없는 지 궁금합니다.
답변 1
1
안녕하세요, 인프런 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에서 더 많은 정보를 찾아볼 수 있습니다.