fix: @PowerJobHandler does not work in cglib proxy #770

This commit is contained in:
tjq 2024-02-08 11:14:19 +08:00
parent 4be6a139dd
commit e63dc91643
3 changed files with 32 additions and 0 deletions

View File

@ -0,0 +1,16 @@
package tech.powerjob.samples.anno;
import java.lang.annotation.*;
/**
* 自定义方法注解
* <a href="https://github.com/PowerJob/PowerJob/issues/770">自定义注解导致 @PowerJobHandler 失效</a>
*
* @author tjq
* @since 2024/2/8
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ATestMethodAnnotation {
}

View File

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

View File

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