From 0a5e2e56af53ffda6c7dd107e6970095cfab79a9 Mon Sep 17 00:00:00 2001 From: Kim JiMyeung Date: Mon, 29 Dec 2025 15:35:18 +0900 Subject: [PATCH] =?UTF-8?q?Batch=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20?= =?UTF-8?q?request=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/controller/BatchController.java | 39 +++++++++++++++++++ .../batch/global/dto/JobLaunchRequest.java | 16 ++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/main/java/com/snp/batch/global/dto/JobLaunchRequest.java diff --git a/src/main/java/com/snp/batch/global/controller/BatchController.java b/src/main/java/com/snp/batch/global/controller/BatchController.java index fc95e42..13c798e 100644 --- a/src/main/java/com/snp/batch/global/controller/BatchController.java +++ b/src/main/java/com/snp/batch/global/controller/BatchController.java @@ -1,20 +1,26 @@ package com.snp.batch.global.controller; import com.snp.batch.global.dto.JobExecutionDto; +import com.snp.batch.global.dto.JobLaunchRequest; import com.snp.batch.global.dto.ScheduleRequest; import com.snp.batch.global.dto.ScheduleResponse; import com.snp.batch.service.BatchService; import com.snp.batch.service.ScheduleService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.Explode; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.enums.ParameterStyle; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -56,6 +62,39 @@ public class BatchController { } } + @Operation(summary = "배치 작업 실행", description = "지정된 배치 작업을 즉시 실행합니다. 쿼리 파라미터로 Job Parameters 전달 가능") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "작업 실행 성공"), + @ApiResponse(responseCode = "500", description = "작업 실행 실패") + }) + @PostMapping("/jobs/{jobName}/executeJobTest") + public ResponseEntity> executeJobTest( + @Parameter( description = "실행할 배치 작업 이름", required = true,example = "sampleProductImportJob") + @PathVariable String jobName, + @ParameterObject JobLaunchRequest request + ) { + Map params = new HashMap<>(); + if (request.getStartDate() != null) params.put("startDate", request.getStartDate()); + if (request.getStopDate() != null) params.put("stopDate", request.getStopDate()); + + log.info("Executing job: {} with params: {}", jobName, params); + + try { + Long executionId = batchService.executeJob(jobName, params); + return ResponseEntity.ok(Map.of( + "success", true, + "message", "Job started successfully", + "executionId", executionId + )); + } catch (Exception e) { + log.error("Error executing job: {}", jobName, e); + return ResponseEntity.internalServerError().body(Map.of( + "success", false, + "message", "Failed to start job: " + e.getMessage() + )); + } + } + @Operation(summary = "배치 작업 목록 조회", description = "등록된 모든 배치 작업 목록을 조회합니다") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "조회 성공") diff --git a/src/main/java/com/snp/batch/global/dto/JobLaunchRequest.java b/src/main/java/com/snp/batch/global/dto/JobLaunchRequest.java new file mode 100644 index 0000000..0c18a36 --- /dev/null +++ b/src/main/java/com/snp/batch/global/dto/JobLaunchRequest.java @@ -0,0 +1,16 @@ +package com.snp.batch.global.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import org.springframework.stereotype.Service; + +@Getter +@Setter +public class JobLaunchRequest { + @Schema(description = "조회 시작일 (ISO 8601)", example = "2023-12-01T00:00:00Z") + private String startDate; + + @Schema(description = "조회 종료일 (ISO 8601)", example = "2023-12-02T00:00:00Z") + private String stopDate; +}