fix: SpringMethodProcessor can't throw correct exception

This commit is contained in:
tjq 2023-06-11 16:44:28 +08:00
parent 388581c321
commit e2887a12f6
3 changed files with 18 additions and 6 deletions

View File

@ -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();

View File

@ -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;

View File

@ -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");
}
}