From e63dc91643b11e85d49fd237fdf8e5f5b361b789 Mon Sep 17 00:00:00 2001 From: tjq Date: Thu, 8 Feb 2024 11:14:19 +0800 Subject: [PATCH] fix: @PowerJobHandler does not work in cglib proxy #770 --- .../samples/anno/ATestMethodAnnotation.java | 16 ++++++++++++++++ .../tester/SpringMethodProcessorService.java | 9 +++++++++ .../BuildInSpringMethodProcessorFactory.java | 7 +++++++ 3 files changed, 32 insertions(+) create mode 100644 powerjob-worker-samples/src/main/java/tech/powerjob/samples/anno/ATestMethodAnnotation.java diff --git a/powerjob-worker-samples/src/main/java/tech/powerjob/samples/anno/ATestMethodAnnotation.java b/powerjob-worker-samples/src/main/java/tech/powerjob/samples/anno/ATestMethodAnnotation.java new file mode 100644 index 00000000..1b1347f7 --- /dev/null +++ b/powerjob-worker-samples/src/main/java/tech/powerjob/samples/anno/ATestMethodAnnotation.java @@ -0,0 +1,16 @@ +package tech.powerjob.samples.anno; + +import java.lang.annotation.*; + +/** + * 自定义方法注解 + * 自定义注解导致 @PowerJobHandler 失效 + * + * @author tjq + * @since 2024/2/8 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface ATestMethodAnnotation { +} 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 ce0777cd..8fd025f0 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 @@ -1,6 +1,7 @@ package tech.powerjob.samples.tester; import org.springframework.stereotype.Component; +import tech.powerjob.samples.anno.ATestMethodAnnotation; import tech.powerjob.worker.annotation.PowerJobHandler; import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.log.OmsLogger; @@ -33,4 +34,12 @@ public class SpringMethodProcessorService { omsLogger.warn("testThrowException"); throw new IllegalArgumentException("test"); } + + @ATestMethodAnnotation + @PowerJobHandler(name = "testNormalReturnWithCustomAnno") + public String testNormalReturnWithCustomAnno(TaskContext context) { + OmsLogger omsLogger = context.getOmsLogger(); + omsLogger.warn("测试自定义注解"); + return "testNormalReturnWithCustomAnno"; + } } 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 00021bb6..342baf3d 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 @@ -3,6 +3,7 @@ package tech.powerjob.worker.processor.impl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; +import org.springframework.core.annotation.AnnotationUtils; import tech.powerjob.worker.annotation.PowerJobHandler; import tech.powerjob.worker.extension.processor.ProcessorBean; import tech.powerjob.worker.extension.processor.ProcessorDefinition; @@ -51,6 +52,12 @@ public class BuildInSpringMethodProcessorFactory extends AbstractBuildInSpringPr Method[] methods = bean.getClass().getDeclaredMethods(); for (Method method : methods) { PowerJobHandler powerJob = method.getAnnotation(PowerJobHandler.class); + + // CGLib代理对象拿不到该注解, 通过 AnnotationUtils.findAnnotation()可以获取到注解 by GitHub@zhangxiang0907 https://github.com/PowerJob/PowerJob/issues/770 + if (powerJob == null) { + powerJob = AnnotationUtils.findAnnotation(method, PowerJobHandler.class); + } + if (powerJob == null) { continue; }