feat:任务框架
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -46,7 +46,7 @@
|
||||
<dependency>
|
||||
<groupId>com.xiang.starter</groupId>
|
||||
<artifactId>xmc-logger-starter</artifactId>
|
||||
<version>1.0</version>
|
||||
<version>1.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @Author: xiang
|
||||
* @Date: 2026-01-05 15:49
|
||||
@@ -16,11 +18,13 @@ public class TaskRegisterRequest {
|
||||
/**
|
||||
* 应用名称
|
||||
*/
|
||||
@NotBlank(message = "应用名称不能为空")
|
||||
private String applicationName;
|
||||
|
||||
/**
|
||||
* 应用地址
|
||||
*/
|
||||
@NotBlank(message = "应用地址不能为空")
|
||||
private String applicationAddress;
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.xiang.app.quartz.admin.service.ITaskConfigService;
|
||||
import com.xiang.xservice.basic.common.resp.Result;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@@ -26,13 +27,13 @@ public class XxzJobRegisterController {
|
||||
private final ITaskConfigService taskConfigService;
|
||||
|
||||
@PostMapping("/single")
|
||||
public Result<Void> registerSingle(@NotNull(message = "单个注册") @Valid TaskRegisterRequest request){
|
||||
public Result<Void> registerSingle(@RequestBody @Valid @NotNull(message = "请求参数不能为空") TaskRegisterRequest request){
|
||||
taskConfigService.registerTask(request);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@PostMapping("/batch")
|
||||
public Result<Void> batch(@NotEmpty(message = "请求参数不能为空") @Valid List<TaskRegisterRequest> request) {
|
||||
public Result<Void> batch(@RequestBody @NotEmpty(message = "请求参数不能为空") @Valid List<TaskRegisterRequest> request) {
|
||||
taskConfigService.registerTasks(request);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -102,6 +103,6 @@ public class TaskConfigServiceImpl implements ITaskConfigService {
|
||||
jobConfigDO.setCron(item.getCron());
|
||||
jobConfigDO.setClazz(item.getClazz());
|
||||
jobConfigDO.setMethod(item.getMethod());
|
||||
jobConfigDO.setJobSwitch(0);
|
||||
jobConfigDO.setJobSwitch(Objects.isNull(jobConfigDO.getJobSwitch()) ? 0 : jobConfigDO.getJobSwitch());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<dependency>
|
||||
<groupId>com.xiang.starter</groupId>
|
||||
<artifactId>xmc-http-starter</artifactId>
|
||||
<version>1.0</version>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.xiang.starter</groupId>
|
||||
|
||||
@@ -14,5 +14,5 @@ public interface AdminJobClient {
|
||||
List<JobConfigDO> fetchJobByAppName(String appName);
|
||||
List<JobConfigDO> fetchJobByAppNameAndVersion(String appName, Integer version);
|
||||
|
||||
void registerJob(JobDefinition jobDefinition);
|
||||
void registerJob(JobDefinition jobDefinition, String className);
|
||||
}
|
||||
|
||||
@@ -6,13 +6,14 @@ import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.xiang.core.quartz.model.JobConfigDO;
|
||||
import com.xiang.core.quartz.model.JobDefinition;
|
||||
import com.xiang.core.quartz.model.TaskRegisterRequest;
|
||||
import com.xiang.core.quartz.model.XxzJobProperties;
|
||||
import com.xiang.xmc.service.http.helper.HttpHelper;
|
||||
import com.xiang.xmc.service.http.helper.BaseHttpHelp;
|
||||
import com.xiang.xmc.service.http.helper.HttpHelperFactory;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -26,13 +27,15 @@ import java.util.Objects;
|
||||
public class HttpAdminJobClientImpl implements AdminJobClient {
|
||||
|
||||
private final XxzJobProperties xxzJobProperties;
|
||||
private static final BaseHttpHelp httpHelp = HttpHelperFactory.createQuartzHttp();
|
||||
|
||||
@Override
|
||||
public List<JobConfigDO> fetchJobByAppName(String appName) {
|
||||
String address = xxzJobProperties.getAdminAddress();
|
||||
address = address + "/open/quartz/fetch/list";
|
||||
Map<String, String> params = Maps.newHashMap();
|
||||
params.put("appName", appName);
|
||||
String resp = HttpHelper.doGet(address, null, params);
|
||||
String resp = httpHelp.doGet(address, params);
|
||||
if (StringUtils.isNotBlank(resp)) {
|
||||
JSONObject jsonObject = JSON.parseObject(resp);
|
||||
if (Objects.nonNull(jsonObject)) {
|
||||
@@ -52,7 +55,7 @@ public class HttpAdminJobClientImpl implements AdminJobClient {
|
||||
Map<String, String> params = Maps.newHashMap();
|
||||
params.put("appName", appName);
|
||||
params.put("currVersion", String.valueOf(version));
|
||||
String resp = HttpHelper.doGet(address, null, params);
|
||||
String resp = httpHelp.doGet(address, params);
|
||||
|
||||
if (StringUtils.isNotBlank(resp)) {
|
||||
JSONObject jsonObject = JSON.parseObject(resp);
|
||||
@@ -67,16 +70,16 @@ public class HttpAdminJobClientImpl implements AdminJobClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerJob(JobDefinition jobDefinition) {
|
||||
JobConfigDO jobConfigDO = new JobConfigDO();
|
||||
jobConfigDO.setApplicationName(xxzJobProperties.getAppName());
|
||||
jobConfigDO.setApplicationAddress(xxzJobProperties.getAdminAddress());
|
||||
jobConfigDO.setBeanName(jobDefinition.getName());
|
||||
jobConfigDO.setClazz(jobConfigDO.getClazz());
|
||||
jobConfigDO.setMethod(jobConfigDO.getMethod());
|
||||
jobConfigDO.setCreateTime(LocalDateTime.now());
|
||||
jobConfigDO.setUpdateTime(LocalDateTime.now());
|
||||
|
||||
|
||||
public void registerJob(JobDefinition jobDefinition, String className) {
|
||||
TaskRegisterRequest request = new TaskRegisterRequest();
|
||||
request.setApplicationName(xxzJobProperties.getAppName());
|
||||
request.setApplicationAddress(xxzJobProperties.getAdminAddress());
|
||||
request.setBeanName(jobDefinition.getName());
|
||||
request.setCron(jobDefinition.getCron());
|
||||
request.setClazz(className);
|
||||
request.setMethod(jobDefinition.getMethod().getName());
|
||||
String address = xxzJobProperties.getAdminAddress();
|
||||
address = address + "/open/quartz/register/single";
|
||||
httpHelp.doPost(address, JSON.toJSONString(request));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.xiang.core.quartz.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author: xiang
|
||||
* @Date: 2026-01-05 15:49
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class TaskRegisterRequest {
|
||||
|
||||
/**
|
||||
* 应用名称
|
||||
*/
|
||||
private String applicationName;
|
||||
|
||||
/**
|
||||
* 应用地址
|
||||
*/
|
||||
private String applicationAddress;
|
||||
|
||||
/**
|
||||
* 定时任务名称
|
||||
*/
|
||||
private String beanName;
|
||||
|
||||
/**
|
||||
* 任务执行调度时间
|
||||
*/
|
||||
private String cron;
|
||||
|
||||
/**
|
||||
* 类名
|
||||
*/
|
||||
private String clazz;
|
||||
|
||||
/**
|
||||
* 方法
|
||||
*/
|
||||
private String method;
|
||||
}
|
||||
@@ -54,7 +54,7 @@ public class JobScanner implements SmartInitializingSingleton {
|
||||
job.setBean(bean);
|
||||
job.setMethod(method);
|
||||
JobDefinitionHolder.register(job);
|
||||
adminJobClient.registerJob(job);
|
||||
adminJobClient.registerJob(job, method.getClass().getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user