From 711c8fcdca3b729d498fe92103919ddd9afa4ac9 Mon Sep 17 00:00:00 2001 From: ysCha Date: Fri, 13 Feb 2026 09:23:38 +0900 Subject: [PATCH 1/2] =?UTF-8?q?batch=20job=EC=9D=B4=208080,=208081=20?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=8B=A4=ED=96=89=EB=90=98=EB=8A=94?= =?UTF-8?q?=EA=B2=83=208080=EB=A7=8C=20=EC=8B=A4=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/interplug/qcast/batch/JobLauncherController.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java index 9cd27498..12c00301 100644 --- a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java +++ b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java @@ -39,6 +39,9 @@ public class JobLauncherController { @Value("${spring.profiles.scheduler}") private String scheduler; + @Value("${server.port:8080}") + private int serverPort; + /** * 서버 시작 시 실행 중(STARTED)인 상태로 남은 Job들을 FAILED 처리 */ @@ -253,6 +256,12 @@ public class JobLauncherController { * 공통 스케줄러 실행 메소드 */ private String executeScheduledJob(String jobName) throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { + // 8080 포트 인스턴스에서만 스케줄러 실행 (멀티 인스턴스 데드락 방지) + if (serverPort != 8080) { + log.debug("스케줄러는 8080 포트 인스턴스에서만 실행됩니다. 현재 포트: {}, Job: {} 스킵", serverPort, jobName); + return "Scheduler runs only on port 8080. Current port: " + serverPort; + } + Job job = jobs.get(jobName); if (job == null) { log.error("Job {} not found", jobName); From 4bcc2fe9652ab207edd049f65241b939ce9275e1 Mon Sep 17 00:00:00 2001 From: ysCha Date: Fri, 13 Feb 2026 09:35:38 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EA=B0=9C=EB=B0=9C=EC=97=90=20batch:=20sche?= =?UTF-8?q?duler-port:=208090=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interplug/qcast/batch/JobLauncherController.java | 11 +++++++---- src/main/resources/config/application-dev.yml | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java index 12c00301..45a90a0f 100644 --- a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java +++ b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java @@ -42,6 +42,9 @@ public class JobLauncherController { @Value("${server.port:8080}") private int serverPort; + @Value("${batch.scheduler-port:8080}") + private int schedulerPort; + /** * 서버 시작 시 실행 중(STARTED)인 상태로 남은 Job들을 FAILED 처리 */ @@ -256,10 +259,10 @@ public class JobLauncherController { * 공통 스케줄러 실행 메소드 */ private String executeScheduledJob(String jobName) throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { - // 8080 포트 인스턴스에서만 스케줄러 실행 (멀티 인스턴스 데드락 방지) - if (serverPort != 8080) { - log.debug("스케줄러는 8080 포트 인스턴스에서만 실행됩니다. 현재 포트: {}, Job: {} 스킵", serverPort, jobName); - return "Scheduler runs only on port 8080. Current port: " + serverPort; + // 스케줄러 전용 포트 인스턴스에서만 실행 (멀티 인스턴스 데드락 방지) + if (serverPort != schedulerPort) { + log.debug("스케줄러는 {} 포트 인스턴스에서만 실행됩니다. 현재 포트: {}, Job: {} 스킵", schedulerPort, serverPort, jobName); + return "Scheduler runs only on port " + schedulerPort + ". Current port: " + serverPort; } Job job = jobs.get(jobName); diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index 65f0a985..53d3bc51 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -25,6 +25,10 @@ spring: enabled: false profiles: scheduler: N + +#batch +batch: + scheduler-port: 8090 #QSP url 하나시스운영 #https://jp.qsalesplatform.com #QSP url 하나시스개발 #http://121.168.9.37:8080 #QSP url interplug dev #http://1.248.227.176:8120