diff --git a/powerjob-worker/src/main/java/tech/powerjob/worker/core/processor/runnable/HeavyProcessorRunnable.java b/powerjob-worker/src/main/java/tech/powerjob/worker/core/processor/runnable/HeavyProcessorRunnable.java index a1da634f..af28b72d 100644 --- a/powerjob-worker/src/main/java/tech/powerjob/worker/core/processor/runnable/HeavyProcessorRunnable.java +++ b/powerjob-worker/src/main/java/tech/powerjob/worker/core/processor/runnable/HeavyProcessorRunnable.java @@ -1,11 +1,15 @@ package tech.powerjob.worker.core.processor.runnable; +import com.google.common.base.Stopwatch; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import tech.powerjob.common.enums.ExecuteType; -import tech.powerjob.worker.common.WorkerRuntime; +import tech.powerjob.common.serialize.SerializerUtils; import tech.powerjob.worker.common.ThreadLocalStore; +import tech.powerjob.worker.common.WorkerRuntime; import tech.powerjob.worker.common.constants.TaskConstant; import tech.powerjob.worker.common.constants.TaskStatus; -import tech.powerjob.common.serialize.SerializerUtils; import tech.powerjob.worker.common.utils.TransportUtils; import tech.powerjob.worker.common.utils.WorkflowContextUtils; import tech.powerjob.worker.core.processor.ProcessResult; @@ -20,11 +24,6 @@ import tech.powerjob.worker.log.OmsLogger; import tech.powerjob.worker.persistence.TaskDO; import tech.powerjob.worker.pojo.model.InstanceInfo; import tech.powerjob.worker.pojo.request.ProcessorReportTaskStatusReq; -import com.google.common.base.Stopwatch; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -import org.apache.commons.lang3.StringUtils; import java.util.Collections; import java.util.List; @@ -105,8 +104,11 @@ public class HeavyProcessorRunnable implements Runnable { private TaskContext constructTaskContext() { TaskContext taskContext = new TaskContext(); - BeanUtils.copyProperties(task, taskContext); taskContext.setJobId(instanceInfo.getJobId()); + taskContext.setInstanceId(task.getInstanceId()); + taskContext.setSubInstanceId(task.getSubInstanceId()); + taskContext.setTaskId(task.getTaskId()); + taskContext.setTaskName(task.getTaskName()); taskContext.setMaxRetryTimes(instanceInfo.getTaskRetryNum()); taskContext.setCurrentRetryTimes(task.getFailedCnt()); taskContext.setJobParams(instanceInfo.getJobParams()); @@ -120,7 +122,7 @@ public class HeavyProcessorRunnable implements Runnable { } private WorkflowContext constructWorkflowContext() { - return new WorkflowContext(instanceInfo.getWfInstanceId(),instanceInfo.getInstanceParams()); + return new WorkflowContext(instanceInfo.getWfInstanceId(), instanceInfo.getInstanceParams()); } /** diff --git a/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/task/TaskTracker.java b/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/task/TaskTracker.java index bbbb45df..a1edebc4 100644 --- a/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/task/TaskTracker.java +++ b/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/task/TaskTracker.java @@ -2,7 +2,6 @@ package tech.powerjob.worker.core.tracker.task; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; import tech.powerjob.common.enums.InstanceStatus; import tech.powerjob.common.model.InstanceDetail; import tech.powerjob.common.request.ServerScheduleJobReq; @@ -61,7 +60,20 @@ public abstract class TaskTracker { this.instanceId = req.getInstanceId(); this.instanceInfo = new InstanceInfo(); - BeanUtils.copyProperties(req, instanceInfo); + + // PowerJob 值拷贝场景不多,引入三方值拷贝类库可能引入类冲突等问题,综合评估手写 ROI 最高 + instanceInfo.setJobId(req.getJobId()); + instanceInfo.setInstanceId(req.getInstanceId()); + instanceInfo.setWfInstanceId(req.getWfInstanceId()); + instanceInfo.setExecuteType(req.getExecuteType()); + instanceInfo.setProcessorType(req.getProcessorType()); + instanceInfo.setProcessorInfo(req.getProcessorInfo()); + instanceInfo.setJobParams(req.getJobParams()); + instanceInfo.setInstanceParams(req.getInstanceParams()); + instanceInfo.setThreadConcurrency(req.getThreadConcurrency()); + instanceInfo.setTaskRetryNum(req.getTaskRetryNum()); + instanceInfo.setLogConfig(req.getLogConfig()); + // 特殊处理超时时间 if (instanceInfo.getInstanceTimeoutMS() <= 0) { instanceInfo.setInstanceTimeoutMS(Integer.MAX_VALUE); @@ -94,7 +106,12 @@ public abstract class TaskTracker { log.warn("[TaskTracker-{}] create TaskTracker from request({}) failed.", req.getInstanceId(), req, e); // 直接发送失败请求 TaskTrackerReportInstanceStatusReq response = new TaskTrackerReportInstanceStatusReq(); - BeanUtils.copyProperties(req, response); + + response.setAppId(workerRuntime.getAppId()); + response.setJobId(req.getJobId()); + response.setInstanceId(req.getInstanceId()); + response.setWfInstanceId(req.getWfInstanceId()); + response.setInstanceStatus(InstanceStatus.FAILED.getV()); response.setResult(String.format("init TaskTracker failed, reason: %s", e.toString())); response.setReportTime(System.currentTimeMillis()); diff --git a/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/task/heavy/FrequentTaskTracker.java b/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/task/heavy/FrequentTaskTracker.java index fd1a0c97..891ce021 100644 --- a/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/task/heavy/FrequentTaskTracker.java +++ b/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/task/heavy/FrequentTaskTracker.java @@ -8,7 +8,6 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.BeanUtils; import tech.powerjob.common.enums.ExecuteType; import tech.powerjob.common.enums.InstanceStatus; import tech.powerjob.common.enums.TimeExpressionType; @@ -135,10 +134,14 @@ public class FrequentTaskTracker extends HeavyTaskTracker { List history = Lists.newLinkedList(); recentSubInstanceInfo.forEach((subId, subInstanceInfo) -> { InstanceDetail.SubInstanceDetail subDetail = new InstanceDetail.SubInstanceDetail(); - BeanUtils.copyProperties(subInstanceInfo, subDetail); + + subDetail.setSubInstanceId(subId); + subDetail.setStartTime(subInstanceInfo.getStartTime()); + subDetail.setFinishedTime(subInstanceInfo.getFinishedTime()); + subDetail.setResult(subInstanceInfo.getResult()); + InstanceStatus status = InstanceStatus.of(subInstanceInfo.status); subDetail.setStatus(status.getV()); - subDetail.setSubInstanceId(subId); history.add(subDetail); });