From e2887a12f65357ff142574e02467de142fbb17fe Mon Sep 17 00:00:00 2001 From: tjq Date: Sun, 11 Jun 2023 16:44:28 +0800 Subject: [PATCH] fix: SpringMethodProcessor can't throw correct exception --- .../tester/SpringMethodProcessorService.java | 7 ++++++- .../BuildInSpringMethodProcessorFactory.java | 1 - .../{ => impl}/MethodBasicProcessor.java | 16 ++++++++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) rename powerjob-worker/src/main/java/tech/powerjob/worker/processor/{ => impl}/MethodBasicProcessor.java (50%) diff --git a/powerjob-worker-samples/src/main/java/tech/powerjob/samples/tester/SpringMethodProcessorService.java b/powerjob-worker-samples/src/main/java/tech/powerjob/samples/tester/SpringMethodProcessorService.java index 7875f8e3..9b8b20eb 100644 --- a/powerjob-worker-samples/src/main/java/tech/powerjob/samples/tester/SpringMethodProcessorService.java +++ b/powerjob-worker-samples/src/main/java/tech/powerjob/samples/tester/SpringMethodProcessorService.java @@ -5,9 +5,14 @@ import tech.powerjob.worker.annotation.PowerJobHandler; import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.log.OmsLogger; -@Component +@Component(value = "springMethodProcessorService") public class SpringMethodProcessorService { + /** + * 处理器配置方法1: 全限定类名#方法名,比如 tech.powerjob.samples.tester.SpringMethodProcessorService#testEmptyReturn + * 处理器配置方法2: SpringBean名称#方法名,比如 springMethodProcessorService#testEmptyReturn + * @param context 必须要有入参 TaskContext,返回值可以是 null,也可以是其他任意类型。正常返回代表成功,抛出异常代表执行失败 + */ @PowerJobHandler(name = "testEmptyReturn") public void test(TaskContext context) { OmsLogger omsLogger = context.getOmsLogger(); diff --git a/powerjob-worker/src/main/java/tech/powerjob/worker/processor/impl/BuildInSpringMethodProcessorFactory.java b/powerjob-worker/src/main/java/tech/powerjob/worker/processor/impl/BuildInSpringMethodProcessorFactory.java index b7a582ff..00021bb6 100644 --- a/powerjob-worker/src/main/java/tech/powerjob/worker/processor/impl/BuildInSpringMethodProcessorFactory.java +++ b/powerjob-worker/src/main/java/tech/powerjob/worker/processor/impl/BuildInSpringMethodProcessorFactory.java @@ -6,7 +6,6 @@ import org.springframework.context.ApplicationContext; import tech.powerjob.worker.annotation.PowerJobHandler; import tech.powerjob.worker.extension.processor.ProcessorBean; import tech.powerjob.worker.extension.processor.ProcessorDefinition; -import tech.powerjob.worker.processor.MethodBasicProcessor; import java.lang.reflect.Method; import java.util.LinkedList; diff --git a/powerjob-worker/src/main/java/tech/powerjob/worker/processor/MethodBasicProcessor.java b/powerjob-worker/src/main/java/tech/powerjob/worker/processor/impl/MethodBasicProcessor.java similarity index 50% rename from powerjob-worker/src/main/java/tech/powerjob/worker/processor/MethodBasicProcessor.java rename to powerjob-worker/src/main/java/tech/powerjob/worker/processor/impl/MethodBasicProcessor.java index b2634203..b148591f 100644 --- a/powerjob-worker/src/main/java/tech/powerjob/worker/processor/MethodBasicProcessor.java +++ b/powerjob-worker/src/main/java/tech/powerjob/worker/processor/impl/MethodBasicProcessor.java @@ -1,13 +1,15 @@ -package tech.powerjob.worker.processor; +package tech.powerjob.worker.processor.impl; +import org.apache.commons.lang3.exception.ExceptionUtils; import tech.powerjob.common.serialize.JsonUtils; import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.sdk.BasicProcessor; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -public class MethodBasicProcessor implements BasicProcessor { +class MethodBasicProcessor implements BasicProcessor { private final Object bean; @@ -20,7 +22,13 @@ public class MethodBasicProcessor implements BasicProcessor { @Override public ProcessResult process(TaskContext context) throws Exception { - Object result = method.invoke(bean, context); - return new ProcessResult(true, JsonUtils.toJSONString(result)); + try { + Object result = method.invoke(bean, context); + return new ProcessResult(true, JsonUtils.toJSONString(result)); + } catch (InvocationTargetException ite) { + ExceptionUtils.rethrow(ite.getTargetException()); + } + + return new ProcessResult(false, "IMPOSSIBLE"); } }