From 64ac13a1fd6c60065d635c306120a1ebb104e2d1 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Sat, 19 Oct 2024 19:08:53 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B5=8B=E8=AF=95openapi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 +- .../snailjob/controller/JobController.java | 24 ++++++++ .../snailjob/handler/TestAddJobHandler.java | 57 +++++++++++++++++++ .../handler/TestGetJobDetailExecutor.java | 23 ++++++++ .../handler/TestTriggerJobExecutor.java | 22 +++++++ .../handler/TestTriggerWorkFlowExecutor.java | 23 ++++++++ .../handler/TestUpdateJobExecutor.java | 27 +++++++++ .../handler/TestUpdateJobStatusExecutor.java | 26 +++++++++ .../TestUpdateWorkFLowStatusExecutor.java | 26 +++++++++ 9 files changed, 231 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/example/snailjob/controller/JobController.java create mode 100644 src/main/java/com/example/snailjob/handler/TestAddJobHandler.java create mode 100644 src/main/java/com/example/snailjob/handler/TestGetJobDetailExecutor.java create mode 100644 src/main/java/com/example/snailjob/handler/TestTriggerJobExecutor.java create mode 100644 src/main/java/com/example/snailjob/handler/TestTriggerWorkFlowExecutor.java create mode 100644 src/main/java/com/example/snailjob/handler/TestUpdateJobExecutor.java create mode 100644 src/main/java/com/example/snailjob/handler/TestUpdateJobStatusExecutor.java create mode 100644 src/main/java/com/example/snailjob/handler/TestUpdateWorkFLowStatusExecutor.java diff --git a/pom.xml b/pom.xml index 3fcd0a3..d8e9ffc 100644 --- a/pom.xml +++ b/pom.xml @@ -44,17 +44,17 @@ com.aizuda snail-job-client-starter - 1.1.1 + 1.2.0-beta2 com.aizuda snail-job-client-retry-core - 1.1.1 + 1.2.0-beta2 com.aizuda snail-job-client-job-core - 1.1.1 + 1.2.0-beta2 com.googlecode.aviator diff --git a/src/main/java/com/example/snailjob/controller/JobController.java b/src/main/java/com/example/snailjob/controller/JobController.java new file mode 100644 index 0000000..4c92f75 --- /dev/null +++ b/src/main/java/com/example/snailjob/controller/JobController.java @@ -0,0 +1,24 @@ +package com.example.snailjob.controller; + +import com.example.snailjob.handler.TestAddJobHandler; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * @author opensnail + * @date 2024-10-19 10:41:25 + * @since sj_1.2.0-beta2 + */ +@RestController +@RequestMapping("/open-api/job") +@Tag(name = "JobOpenApi", description = "通过OpenApi可以灵活的实现对Job的增、改、查功能") +@RequiredArgsConstructor +public class JobController { + private final TestAddJobHandler testAddJobHandler; + + @PostMapping("/custer/add") + public Long addClusterJob(@RequestBody String jobName) { + return testAddJobHandler.addClusterJob(jobName); + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java b/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java new file mode 100644 index 0000000..051ab3b --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java @@ -0,0 +1,57 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.enums.AllocationAlgorithmEnum; +import com.aizuda.snailjob.client.job.core.enums.TriggerTypeEnum; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import com.aizuda.snailjob.common.core.enums.BlockStrategyEnum; +import org.springframework.stereotype.Component; + +@Component +public class TestAddJobHandler { + + /** + * 新增集群模式的任务 + * + * @param jobName 任务名称 + * @return 任务id + */ + public Long addClusterJob(String jobName) { + return SnailJobOpenApi.addClusterJob() + .setRouteKey(AllocationAlgorithmEnum.RANDOM) + .setJobName(jobName) + .setExecutorInfo("testJobExecutor") + .setExecutorTimeout(30) + .setDescription("add") + .setBlockStrategy(BlockStrategyEnum.DISCARD) + .setMaxRetryTimes(1) + .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME) + .setTriggerInterval(String.valueOf(60)) + .addArgsStr("测试数据", 123) + .addArgsStr("addArg", "args") + .setRetryInterval(3) + .execute(); + + } + + /** + * 新增集群模式的任务 + * + * @param jobName 任务名称 + * @return 任务id + */ + public Long addShardingJob(String jobName) { + return SnailJobOpenApi.addShardingJob() + .setJobName(jobName) + .setExecutorInfo("testJobExecutor") + .setExecutorTimeout(30) + .setDescription("add") + .setBlockStrategy(BlockStrategyEnum.DISCARD) + .setMaxRetryTimes(1) + .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME) + .setTriggerInterval(String.valueOf(60)) + .addShardingArgs("分片1", "分片2", "分片3") + .setRetryInterval(3) + .execute(); + + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestGetJobDetailExecutor.java b/src/main/java/com/example/snailjob/handler/TestGetJobDetailExecutor.java new file mode 100644 index 0000000..3da31de --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestGetJobDetailExecutor.java @@ -0,0 +1,23 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; +import com.aizuda.snailjob.client.job.core.dto.JobArgs; +import com.aizuda.snailjob.client.job.core.dto.JobResponseVO; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import com.aizuda.snailjob.client.model.ExecuteResult; +import com.aizuda.snailjob.common.core.util.JsonUtil; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@JobExecutor(name = "testGetJobDetailExecutor") +public class TestGetJobDetailExecutor { + public ExecuteResult jobExecute(JobArgs jobArgs) { + Object jobParams = jobArgs.getJobParams(); + Map hashMap = JsonUtil.parseHashMap((String) jobParams); + String id = String.valueOf(hashMap.get("id")); + JobResponseVO execute = SnailJobOpenApi.getJobDetail(Long.valueOf(id)).execute(); + return ExecuteResult.success(execute); + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestTriggerJobExecutor.java b/src/main/java/com/example/snailjob/handler/TestTriggerJobExecutor.java new file mode 100644 index 0000000..c5c2482 --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestTriggerJobExecutor.java @@ -0,0 +1,22 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; +import com.aizuda.snailjob.client.job.core.dto.JobArgs; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import com.aizuda.snailjob.client.model.ExecuteResult; +import com.aizuda.snailjob.common.core.util.JsonUtil; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@JobExecutor(name = "testTriggerJobExecutor") +public class TestTriggerJobExecutor { + public ExecuteResult jobExecute(JobArgs jobArgs) { + Object jobParams = jobArgs.getJobParams(); + Map hashMap = JsonUtil.parseHashMap((String) jobParams); + String id = String.valueOf(hashMap.get("id")); + Boolean execute = SnailJobOpenApi.triggerJob(Long.valueOf(id)).execute(); + return ExecuteResult.success(execute); + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestTriggerWorkFlowExecutor.java b/src/main/java/com/example/snailjob/handler/TestTriggerWorkFlowExecutor.java new file mode 100644 index 0000000..ddc9b41 --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestTriggerWorkFlowExecutor.java @@ -0,0 +1,23 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; +import com.aizuda.snailjob.client.job.core.dto.JobArgs; +import com.aizuda.snailjob.client.job.core.handler.RequestTriggerJobHandler; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import com.aizuda.snailjob.client.model.ExecuteResult; +import com.aizuda.snailjob.common.core.util.JsonUtil; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@JobExecutor(name = "testTriggerWorkFlowExecutor") +public class TestTriggerWorkFlowExecutor { + public ExecuteResult jobExecute(JobArgs jobArgs) { + Object jobParams = jobArgs.getJobParams(); + Map hashMap = JsonUtil.parseHashMap((String) jobParams); + String id = String.valueOf(hashMap.get("id")); + RequestTriggerJobHandler jobHandler = SnailJobOpenApi.triggerWorkFlow(Long.valueOf(id)); + return ExecuteResult.success(jobHandler.execute()); + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobExecutor.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobExecutor.java new file mode 100644 index 0000000..595d49d --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestUpdateJobExecutor.java @@ -0,0 +1,27 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; +import com.aizuda.snailjob.client.job.core.dto.JobArgs; +import com.aizuda.snailjob.client.job.core.enums.TriggerTypeEnum; +import com.aizuda.snailjob.client.job.core.handler.RequestUpdateHandler; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import com.aizuda.snailjob.client.model.ExecuteResult; +import com.aizuda.snailjob.common.core.util.JsonUtil; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@JobExecutor(name = "testUpdateJobExecutor") +public class TestUpdateJobExecutor { + public ExecuteResult jobExecute(JobArgs jobArgs) { + Object jobParams = jobArgs.getJobParams(); + Map hashMap = JsonUtil.parseHashMap((String) jobParams); + String id = String.valueOf(hashMap.get("id")); + String jobName = String.valueOf(hashMap.get("jobName")); + RequestUpdateHandler updateHandler = SnailJobOpenApi.updateJob(Long.valueOf(id)); + updateHandler.setJobName(jobName); + updateHandler.setTriggerType(TriggerTypeEnum.WORK_FLOW); + return ExecuteResult.success(updateHandler.execute()); + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusExecutor.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusExecutor.java new file mode 100644 index 0000000..74f478d --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusExecutor.java @@ -0,0 +1,26 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; +import com.aizuda.snailjob.client.job.core.dto.JobArgs; +import com.aizuda.snailjob.client.job.core.handler.RequestUpdateStatusHandler; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import com.aizuda.snailjob.client.model.ExecuteResult; +import com.aizuda.snailjob.common.core.enums.StatusEnum; +import com.aizuda.snailjob.common.core.util.JsonUtil; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@JobExecutor(name = "testUpdateJobStatusExecutor") +public class TestUpdateJobStatusExecutor { + public ExecuteResult jobExecute(JobArgs jobArgs) { + Object jobParams = jobArgs.getJobParams(); + Map hashMap = JsonUtil.parseHashMap((String) jobParams); + String id = String.valueOf(hashMap.get("id")); + RequestUpdateStatusHandler updateJobStatus = SnailJobOpenApi.updateJobStatus(Long.valueOf(id)); + updateJobStatus.setStatus(StatusEnum.NO); + + return ExecuteResult.success(updateJobStatus.execute()); + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateWorkFLowStatusExecutor.java b/src/main/java/com/example/snailjob/handler/TestUpdateWorkFLowStatusExecutor.java new file mode 100644 index 0000000..d42c328 --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestUpdateWorkFLowStatusExecutor.java @@ -0,0 +1,26 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; +import com.aizuda.snailjob.client.job.core.dto.JobArgs; +import com.aizuda.snailjob.client.job.core.handler.RequestUpdateStatusHandler; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import com.aizuda.snailjob.client.model.ExecuteResult; +import com.aizuda.snailjob.common.core.enums.StatusEnum; +import com.aizuda.snailjob.common.core.util.JsonUtil; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@JobExecutor(name = "testUpdateWorkFLowStatusExecutor") +public class TestUpdateWorkFLowStatusExecutor { + public ExecuteResult jobExecute(JobArgs jobArgs) { + Object jobParams = jobArgs.getJobParams(); + Map hashMap = JsonUtil.parseHashMap((String) jobParams); + String id = String.valueOf(hashMap.get("id")); + RequestUpdateStatusHandler updateJobStatus = SnailJobOpenApi.updateWorkFlowStatus(Long.valueOf(id)); + updateJobStatus.setStatus(StatusEnum.NO); + + return ExecuteResult.success(updateJobStatus.execute()); + } +} From 04b6ba9d4aca333aae1560971923d6ab211908db Mon Sep 17 00:00:00 2001 From: srzou Date: Sat, 19 Oct 2024 21:12:02 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20query=E3=80=81trigger?= =?UTF-8?q?=E3=80=81updateStatus=20=E7=9B=B8=E5=85=B3demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snailjob/handler/TestQueryJobHandler.java | 19 ++++++++++ .../handler/TestTriggerJobHandler.java | 28 +++++++++++++++ .../handler/TestUpdateJobStatusHandler.java | 35 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 src/main/java/com/example/snailjob/handler/TestQueryJobHandler.java create mode 100644 src/main/java/com/example/snailjob/handler/TestTriggerJobHandler.java create mode 100644 src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java diff --git a/src/main/java/com/example/snailjob/handler/TestQueryJobHandler.java b/src/main/java/com/example/snailjob/handler/TestQueryJobHandler.java new file mode 100644 index 0000000..d78fa55 --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestQueryJobHandler.java @@ -0,0 +1,19 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.dto.JobResponseVO; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import org.springframework.stereotype.Component; + +@Component +public class TestQueryJobHandler { + + /** + * 查看任务详情 + * + * @param jobId + * @return 任务详情 + */ + public JobResponseVO queryJob(Long jobId){ + return SnailJobOpenApi.getJobDetail(jobId).execute(); + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestTriggerJobHandler.java b/src/main/java/com/example/snailjob/handler/TestTriggerJobHandler.java new file mode 100644 index 0000000..1d22f47 --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestTriggerJobHandler.java @@ -0,0 +1,28 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import org.springframework.stereotype.Component; + +@Component +public class TestTriggerJobHandler { + + /** + * 手动调度任务 + * + * @param jobId 任务ID + * @return + */ + public Boolean triggerJob(Long jobId){ + return SnailJobOpenApi.triggerJob(jobId).execute(); + } + + /** + * 手动调度工作流任务 + * + * @param workFlowId 工作流任务ID + * @return + */ + public Boolean triggerWorkFlow(Long workFlowId){ + return SnailJobOpenApi.triggerWorkFlow(workFlowId).execute(); + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java new file mode 100644 index 0000000..2483061 --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java @@ -0,0 +1,35 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import com.aizuda.snailjob.common.core.enums.StatusEnum; +import org.springframework.stereotype.Component; + +@Component +public class TestUpdateJobStatusHandler { + + /** + * 更新定时任务状态 + * + * @param jobId 定时任务ID + * @return + */ + public Boolean updateJobStatus(Long jobId){ + return SnailJobOpenApi + .updateJobStatus(jobId) + .setStatus(StatusEnum.NO) + .execute(); + } + + /** + * 更新工作流任务状态 + * + * @param workFlowId 工作流ID + * @return + */ + public Boolean updateWorkFlowStatus(Long workFlowId){ + return SnailJobOpenApi + .updateWorkFlowStatus(workFlowId) + .setStatus(StatusEnum.YES) + .execute(); + } +} From 503c401e098936dcc815698e2ca3c66f86e7c3ee Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Sun, 20 Oct 2024 12:59:50 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=B5=8B=E8=AF=95openapi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snailjob/controller/JobController.java | 42 +++++++++++ .../snailjob/handler/TestAddJobHandler.java | 71 ++++++++++++++++++- .../handler/TestGetJobDetailExecutor.java | 23 ------ .../handler/TestTriggerJobExecutor.java | 22 ------ .../handler/TestTriggerWorkFlowExecutor.java | 23 ------ .../handler/TestUpdateJobExecutor.java | 27 ------- .../handler/TestUpdateJobStatusExecutor.java | 26 ------- .../handler/TestUpdateJobStatusHandler.java | 2 +- .../TestUpdateWorkFLowStatusExecutor.java | 26 ------- 9 files changed, 113 insertions(+), 149 deletions(-) delete mode 100644 src/main/java/com/example/snailjob/handler/TestGetJobDetailExecutor.java delete mode 100644 src/main/java/com/example/snailjob/handler/TestTriggerJobExecutor.java delete mode 100644 src/main/java/com/example/snailjob/handler/TestTriggerWorkFlowExecutor.java delete mode 100644 src/main/java/com/example/snailjob/handler/TestUpdateJobExecutor.java delete mode 100644 src/main/java/com/example/snailjob/handler/TestUpdateJobStatusExecutor.java delete mode 100644 src/main/java/com/example/snailjob/handler/TestUpdateWorkFLowStatusExecutor.java diff --git a/src/main/java/com/example/snailjob/controller/JobController.java b/src/main/java/com/example/snailjob/controller/JobController.java index 4c92f75..f864b5f 100644 --- a/src/main/java/com/example/snailjob/controller/JobController.java +++ b/src/main/java/com/example/snailjob/controller/JobController.java @@ -1,6 +1,10 @@ package com.example.snailjob.controller; +import com.aizuda.snailjob.client.job.core.dto.JobResponseVO; import com.example.snailjob.handler.TestAddJobHandler; +import com.example.snailjob.handler.TestQueryJobHandler; +import com.example.snailjob.handler.TestTriggerJobHandler; +import com.example.snailjob.handler.TestUpdateJobStatusHandler; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -16,9 +20,47 @@ import org.springframework.web.bind.annotation.*; @RequiredArgsConstructor public class JobController { private final TestAddJobHandler testAddJobHandler; + private final TestQueryJobHandler testQueryJobHandler; + private final TestTriggerJobHandler testTriggerJobHandler; + private final TestUpdateJobStatusHandler testUpdateJobStatusHandler; @PostMapping("/custer/add") public Long addClusterJob(@RequestBody String jobName) { return testAddJobHandler.addClusterJob(jobName); } + + @PostMapping("/broadcast/add") + public Long addBroadcastJob(@RequestBody String jobName) { + return testAddJobHandler.addBroadcastJob(jobName); + } + + @PostMapping("/sharding/add") + public Long addShardingJob(@RequestBody String jobName) { + return testAddJobHandler.addShardingJob(jobName); + } + + @PostMapping("/map/add") + public Long addMapJob(@RequestBody String jobName) { + return testAddJobHandler.addMapJob(jobName); + } + + @PostMapping("/map-reduce/add") + public Long addMapReduceJob(@RequestBody String jobName) { + return testAddJobHandler.addMapReduceJob(jobName); + } + + @GetMapping("/detail/id") + public JobResponseVO addMapReduceJob(@RequestParam("id") Long id) { + return testQueryJobHandler.queryJob(id); + } + + @PostMapping("/trigger/{id}") + public Boolean triggerJob(@PathVariable("id") Long id) { + return testTriggerJobHandler.triggerJob(id); + } + + @PutMapping("/update/status/{id}") + public Boolean updateJob(@PathVariable("id") Long id) { + return testUpdateJobStatusHandler.updateJobStatus(id); + } } diff --git a/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java b/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java index 051ab3b..8f184f4 100644 --- a/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java +++ b/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java @@ -39,6 +39,29 @@ public class TestAddJobHandler { * @param jobName 任务名称 * @return 任务id */ + public Long addBroadcastJob(String jobName) { + return SnailJobOpenApi.addBroadcastJob() + .setJobName(jobName) + .setExecutorInfo("testJobExecutor") + .setExecutorTimeout(30) + .setDescription("add") + .setBlockStrategy(BlockStrategyEnum.DISCARD) + .setMaxRetryTimes(1) + .setTriggerType(TriggerTypeEnum.CRON) + .setTriggerInterval("afas") + .addArgsStr("测试数据", 123) + .addArgsStr("addArg", "args") + .setRetryInterval(3) + .execute(); + + } + + /** + * 新增Sharding模式的任务 + * + * @param jobName 任务名称 + * @return 任务id + */ public Long addShardingJob(String jobName) { return SnailJobOpenApi.addShardingJob() .setJobName(jobName) @@ -48,8 +71,54 @@ public class TestAddJobHandler { .setBlockStrategy(BlockStrategyEnum.DISCARD) .setMaxRetryTimes(1) .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME) - .setTriggerInterval(String.valueOf(60)) + .setTriggerInterval(60) .addShardingArgs("分片1", "分片2", "分片3") + .setParallelNum(1) + .setRetryInterval(3) + .execute(); + + } + + /** + * 新增MapReduce模式的任务 + * + * @param jobName 任务名称 + * @return 任务id + */ + public Long addMapJob(String jobName) { + return SnailJobOpenApi.addMapJob() + .setJobName(jobName) + .setExecutorInfo("testJobExecutor") + .setExecutorTimeout(30) + .setDescription("add") + .setBlockStrategy(BlockStrategyEnum.DISCARD) + .setMaxRetryTimes(1) + .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME) + .setTriggerInterval(String.valueOf(60)) + .setParallelNum(3) + .setRetryInterval(3) + .execute(); + + } + + /** + * 新增MapReduce模式的任务 + * + * @param jobName 任务名称 + * @return 任务id + */ + public Long addMapReduceJob(String jobName) { + return SnailJobOpenApi.addMapReduceJob() + .setJobName(jobName) + .setExecutorInfo("testJobExecutor") + .setExecutorTimeout(30) + .setDescription("add") + .setBlockStrategy(BlockStrategyEnum.DISCARD) + .setMaxRetryTimes(1) + .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME) + .setTriggerInterval(String.valueOf(60)) + .setParallelNum(3) + .setShardNum(2) .setRetryInterval(3) .execute(); diff --git a/src/main/java/com/example/snailjob/handler/TestGetJobDetailExecutor.java b/src/main/java/com/example/snailjob/handler/TestGetJobDetailExecutor.java deleted file mode 100644 index 3da31de..0000000 --- a/src/main/java/com/example/snailjob/handler/TestGetJobDetailExecutor.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.snailjob.handler; - -import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.job.core.dto.JobResponseVO; -import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; -import com.aizuda.snailjob.client.model.ExecuteResult; -import com.aizuda.snailjob.common.core.util.JsonUtil; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -@JobExecutor(name = "testGetJobDetailExecutor") -public class TestGetJobDetailExecutor { - public ExecuteResult jobExecute(JobArgs jobArgs) { - Object jobParams = jobArgs.getJobParams(); - Map hashMap = JsonUtil.parseHashMap((String) jobParams); - String id = String.valueOf(hashMap.get("id")); - JobResponseVO execute = SnailJobOpenApi.getJobDetail(Long.valueOf(id)).execute(); - return ExecuteResult.success(execute); - } -} diff --git a/src/main/java/com/example/snailjob/handler/TestTriggerJobExecutor.java b/src/main/java/com/example/snailjob/handler/TestTriggerJobExecutor.java deleted file mode 100644 index c5c2482..0000000 --- a/src/main/java/com/example/snailjob/handler/TestTriggerJobExecutor.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.snailjob.handler; - -import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; -import com.aizuda.snailjob.client.model.ExecuteResult; -import com.aizuda.snailjob.common.core.util.JsonUtil; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -@JobExecutor(name = "testTriggerJobExecutor") -public class TestTriggerJobExecutor { - public ExecuteResult jobExecute(JobArgs jobArgs) { - Object jobParams = jobArgs.getJobParams(); - Map hashMap = JsonUtil.parseHashMap((String) jobParams); - String id = String.valueOf(hashMap.get("id")); - Boolean execute = SnailJobOpenApi.triggerJob(Long.valueOf(id)).execute(); - return ExecuteResult.success(execute); - } -} diff --git a/src/main/java/com/example/snailjob/handler/TestTriggerWorkFlowExecutor.java b/src/main/java/com/example/snailjob/handler/TestTriggerWorkFlowExecutor.java deleted file mode 100644 index ddc9b41..0000000 --- a/src/main/java/com/example/snailjob/handler/TestTriggerWorkFlowExecutor.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.snailjob.handler; - -import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.job.core.handler.RequestTriggerJobHandler; -import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; -import com.aizuda.snailjob.client.model.ExecuteResult; -import com.aizuda.snailjob.common.core.util.JsonUtil; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -@JobExecutor(name = "testTriggerWorkFlowExecutor") -public class TestTriggerWorkFlowExecutor { - public ExecuteResult jobExecute(JobArgs jobArgs) { - Object jobParams = jobArgs.getJobParams(); - Map hashMap = JsonUtil.parseHashMap((String) jobParams); - String id = String.valueOf(hashMap.get("id")); - RequestTriggerJobHandler jobHandler = SnailJobOpenApi.triggerWorkFlow(Long.valueOf(id)); - return ExecuteResult.success(jobHandler.execute()); - } -} diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobExecutor.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobExecutor.java deleted file mode 100644 index 595d49d..0000000 --- a/src/main/java/com/example/snailjob/handler/TestUpdateJobExecutor.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.snailjob.handler; - -import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.job.core.enums.TriggerTypeEnum; -import com.aizuda.snailjob.client.job.core.handler.RequestUpdateHandler; -import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; -import com.aizuda.snailjob.client.model.ExecuteResult; -import com.aizuda.snailjob.common.core.util.JsonUtil; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -@JobExecutor(name = "testUpdateJobExecutor") -public class TestUpdateJobExecutor { - public ExecuteResult jobExecute(JobArgs jobArgs) { - Object jobParams = jobArgs.getJobParams(); - Map hashMap = JsonUtil.parseHashMap((String) jobParams); - String id = String.valueOf(hashMap.get("id")); - String jobName = String.valueOf(hashMap.get("jobName")); - RequestUpdateHandler updateHandler = SnailJobOpenApi.updateJob(Long.valueOf(id)); - updateHandler.setJobName(jobName); - updateHandler.setTriggerType(TriggerTypeEnum.WORK_FLOW); - return ExecuteResult.success(updateHandler.execute()); - } -} diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusExecutor.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusExecutor.java deleted file mode 100644 index 74f478d..0000000 --- a/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusExecutor.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.example.snailjob.handler; - -import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.job.core.handler.RequestUpdateStatusHandler; -import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; -import com.aizuda.snailjob.client.model.ExecuteResult; -import com.aizuda.snailjob.common.core.enums.StatusEnum; -import com.aizuda.snailjob.common.core.util.JsonUtil; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -@JobExecutor(name = "testUpdateJobStatusExecutor") -public class TestUpdateJobStatusExecutor { - public ExecuteResult jobExecute(JobArgs jobArgs) { - Object jobParams = jobArgs.getJobParams(); - Map hashMap = JsonUtil.parseHashMap((String) jobParams); - String id = String.valueOf(hashMap.get("id")); - RequestUpdateStatusHandler updateJobStatus = SnailJobOpenApi.updateJobStatus(Long.valueOf(id)); - updateJobStatus.setStatus(StatusEnum.NO); - - return ExecuteResult.success(updateJobStatus.execute()); - } -} diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java index 2483061..1ab0dda 100644 --- a/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java +++ b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java @@ -16,7 +16,7 @@ public class TestUpdateJobStatusHandler { public Boolean updateJobStatus(Long jobId){ return SnailJobOpenApi .updateJobStatus(jobId) - .setStatus(StatusEnum.NO) + .setStatus(StatusEnum.YES) .execute(); } diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateWorkFLowStatusExecutor.java b/src/main/java/com/example/snailjob/handler/TestUpdateWorkFLowStatusExecutor.java deleted file mode 100644 index d42c328..0000000 --- a/src/main/java/com/example/snailjob/handler/TestUpdateWorkFLowStatusExecutor.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.example.snailjob.handler; - -import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.job.core.handler.RequestUpdateStatusHandler; -import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; -import com.aizuda.snailjob.client.model.ExecuteResult; -import com.aizuda.snailjob.common.core.enums.StatusEnum; -import com.aizuda.snailjob.common.core.util.JsonUtil; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -@JobExecutor(name = "testUpdateWorkFLowStatusExecutor") -public class TestUpdateWorkFLowStatusExecutor { - public ExecuteResult jobExecute(JobArgs jobArgs) { - Object jobParams = jobArgs.getJobParams(); - Map hashMap = JsonUtil.parseHashMap((String) jobParams); - String id = String.valueOf(hashMap.get("id")); - RequestUpdateStatusHandler updateJobStatus = SnailJobOpenApi.updateWorkFlowStatus(Long.valueOf(id)); - updateJobStatus.setStatus(StatusEnum.NO); - - return ExecuteResult.success(updateJobStatus.execute()); - } -} From 72599676e109bfeeea830988e847e824a7cb63ca Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Mon, 21 Oct 2024 23:08:18 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snailjob/controller/JobController.java | 82 +++++++++++++++++-- .../controller/WorkflowController.java | 40 +++++++++ .../handler/TestUpdateJobHandler.java | 77 +++++++++++++++++ .../handler/TestUpdateJobStatusHandler.java | 9 +- 4 files changed, 195 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/example/snailjob/controller/WorkflowController.java create mode 100644 src/main/java/com/example/snailjob/handler/TestUpdateJobHandler.java diff --git a/src/main/java/com/example/snailjob/controller/JobController.java b/src/main/java/com/example/snailjob/controller/JobController.java index f864b5f..1376dac 100644 --- a/src/main/java/com/example/snailjob/controller/JobController.java +++ b/src/main/java/com/example/snailjob/controller/JobController.java @@ -1,10 +1,8 @@ package com.example.snailjob.controller; import com.aizuda.snailjob.client.job.core.dto.JobResponseVO; -import com.example.snailjob.handler.TestAddJobHandler; -import com.example.snailjob.handler.TestQueryJobHandler; -import com.example.snailjob.handler.TestTriggerJobHandler; -import com.example.snailjob.handler.TestUpdateJobStatusHandler; +import com.example.snailjob.handler.*; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -20,47 +18,113 @@ import org.springframework.web.bind.annotation.*; @RequiredArgsConstructor public class JobController { private final TestAddJobHandler testAddJobHandler; + private final TestUpdateJobHandler testUpdateJobHandler; private final TestQueryJobHandler testQueryJobHandler; private final TestTriggerJobHandler testTriggerJobHandler; private final TestUpdateJobStatusHandler testUpdateJobStatusHandler; + @Operation( + description = "添加集群模式的定时任务" + ) @PostMapping("/custer/add") public Long addClusterJob(@RequestBody String jobName) { return testAddJobHandler.addClusterJob(jobName); } + @Operation( + description = "添加广播模式的定时任务" + ) @PostMapping("/broadcast/add") public Long addBroadcastJob(@RequestBody String jobName) { return testAddJobHandler.addBroadcastJob(jobName); } + @Operation( + description = "添加静态分片模式的定时任务" + ) @PostMapping("/sharding/add") public Long addShardingJob(@RequestBody String jobName) { return testAddJobHandler.addShardingJob(jobName); } + @Operation( + description = "添加Map模式的定时任务" + ) @PostMapping("/map/add") public Long addMapJob(@RequestBody String jobName) { return testAddJobHandler.addMapJob(jobName); } + @Operation( + description = "添加MapReduce模式的定时任务" + ) @PostMapping("/map-reduce/add") public Long addMapReduceJob(@RequestBody String jobName) { return testAddJobHandler.addMapReduceJob(jobName); } - @GetMapping("/detail/id") - public JobResponseVO addMapReduceJob(@RequestParam("id") Long id) { + @Operation( + description = "更新集群模式的定时任务" + ) + @PutMapping("/custer/update") + public Boolean updateClusterJob(@RequestBody Long id) { + return testUpdateJobHandler.updateClusterJob(id); + } + + @Operation( + description = "更新广播模式的定时任务" + ) + @PutMapping("/broadcast/update") + public Boolean updateBroadcastJob(@RequestBody Long id) { + return testUpdateJobHandler.updateBroadcastJob(id); + } + + @Operation( + description = "更新静态分片模式的定时任务" + ) + @PutMapping("/sharding/update") + public Boolean addShardingJob(@RequestBody Long id) { + return testUpdateJobHandler.updateShardingJob(id); + } + + @Operation( + description = "更新Map模式的定时任务" + ) + @PutMapping("/map/update") + public Boolean updateMapJob(@RequestBody Long id) { + return testUpdateJobHandler.updateMapJob(id); + } + + @Operation( + description = "更新MapReduce模式的定时任务" + ) + @PutMapping("/map-reduce/update") + public Boolean updateMapReduceJob(@RequestBody Long id) { + return testUpdateJobHandler.updateMapReduceJob(id); + } + + @Operation( + description = "通过任务id查询任务的详情" + ) + @GetMapping("/detail/{id}") + public JobResponseVO addMapReduceJob(@PathVariable("id") Long id) { return testQueryJobHandler.queryJob(id); } + @Operation( + description = "手动触发任务" + ) @PostMapping("/trigger/{id}") public Boolean triggerJob(@PathVariable("id") Long id) { return testTriggerJobHandler.triggerJob(id); } - @PutMapping("/update/status/{id}") - public Boolean updateJob(@PathVariable("id") Long id) { - return testUpdateJobStatusHandler.updateJobStatus(id); + @Operation( + description = "根据id更新任务的状态", + summary = "0:关闭 1:开启" + ) + @PutMapping("/update/status/{id}/{status}") + public Boolean updateJob(@PathVariable("id") Long id, @PathVariable("status") Long status) { + return testUpdateJobStatusHandler.updateJobStatus(id, status); } } diff --git a/src/main/java/com/example/snailjob/controller/WorkflowController.java b/src/main/java/com/example/snailjob/controller/WorkflowController.java new file mode 100644 index 0000000..29917fc --- /dev/null +++ b/src/main/java/com/example/snailjob/controller/WorkflowController.java @@ -0,0 +1,40 @@ +package com.example.snailjob.controller; + +import com.example.snailjob.handler.TestTriggerJobHandler; +import com.example.snailjob.handler.TestUpdateJobStatusHandler; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * @author opensnail + * @date 2024-10-19 10:41:25 + * @since sj_1.2.0-beta2 + */ +@RestController +@RequestMapping("/open-api/workflow") +@Tag(name = "JobOpenApi", description = "通过OpenApi可以灵活的实现对的Workflow触发和更新状态功能") +@RequiredArgsConstructor +public class WorkflowController { + private final TestTriggerJobHandler testTriggerJobHandler; + private final TestUpdateJobStatusHandler testUpdateJobStatusHandler; + + @Operation( + description = "手动触发任务" + ) + @PostMapping("/trigger/{id}") + public Boolean triggerJob(@PathVariable("id") Long id) { + return testTriggerJobHandler.triggerWorkFlow(id); + } + + @Operation( + description = "根据id更新任务的状态", + summary = "0:关闭 1:开启" + ) + @PutMapping("/update/status/{id}/{status}") + public Boolean updateJob(@PathVariable("id") Long id, @PathVariable("status") Long status) { + return testUpdateJobStatusHandler.updateWorkFlowStatus(id, status); + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobHandler.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobHandler.java new file mode 100644 index 0000000..7af4ba8 --- /dev/null +++ b/src/main/java/com/example/snailjob/handler/TestUpdateJobHandler.java @@ -0,0 +1,77 @@ +package com.example.snailjob.handler; + +import com.aizuda.snailjob.client.job.core.enums.TriggerTypeEnum; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import org.springframework.stereotype.Component; + +import java.util.Random; + +@Component +public class TestUpdateJobHandler { + + /** + * 新增集群模式的任务 + * + * @return 任务id + */ + public Boolean updateClusterJob(Long jobId) { + return SnailJobOpenApi.updateClusterJob(jobId) + .setMaxRetryTimes(1) + .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME) + .setTriggerInterval(String.valueOf(60)) + .addArgsStr("update测试数据", new Random().nextInt(1000)) + .addArgsStr("updateArg", "args") + .setRetryInterval(3) + .execute(); + + } + + /** + * 新增集群模式的任务 + * + * @return 任务id + */ + public Boolean updateBroadcastJob(Long jobId) { + return SnailJobOpenApi.updateBroadcastJob(jobId) + .addArgsStr("update测试数据", new Random().nextInt(1000)) + .execute(); + + } + + /** + * 新增Sharding模式的任务 + * + * @return 任务id + */ + public Boolean updateShardingJob(Long jobId) { + return SnailJobOpenApi.updateShardingJob(jobId) + .addShardingArgs("update分片1", "update分片2", "update分片3") + .execute(); + + } + + /** + * 新增MapReduce模式的任务 + * + * @return 任务id + */ + public Boolean updateMapJob(Long jobId) { + return SnailJobOpenApi.updateMapJob(jobId) + .addArgsStr("update测试数据", new Random().nextInt(1000)) + .setParallelNum(3) + .execute(); + + } + + /** + * 新增MapReduce模式的任务 + * + * @return 任务id + */ + public Boolean updateMapReduceJob(Long jobId) { + return SnailJobOpenApi.updateMapReduceJob(jobId) + .addArgsStr("update测试数据", new Random().nextInt(1000)) + .execute(); + + } +} diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java index 1ab0dda..8894e4f 100644 --- a/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java +++ b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java @@ -13,10 +13,10 @@ public class TestUpdateJobStatusHandler { * @param jobId 定时任务ID * @return */ - public Boolean updateJobStatus(Long jobId){ + public Boolean updateJobStatus(Long jobId, Long status) { return SnailJobOpenApi .updateJobStatus(jobId) - .setStatus(StatusEnum.YES) + .setStatus(StatusEnum.YES.getStatus().equals(status.intValue()) ? StatusEnum.YES : StatusEnum.NO) .execute(); } @@ -24,12 +24,13 @@ public class TestUpdateJobStatusHandler { * 更新工作流任务状态 * * @param workFlowId 工作流ID + * @param status * @return */ - public Boolean updateWorkFlowStatus(Long workFlowId){ + public Boolean updateWorkFlowStatus(Long workFlowId, Long status) { return SnailJobOpenApi .updateWorkFlowStatus(workFlowId) - .setStatus(StatusEnum.YES) + .setStatus(StatusEnum.YES.getStatus().equals(status.intValue()) ? StatusEnum.YES : StatusEnum.NO) .execute(); } }