|
@@ -4,7 +4,6 @@ import com.google.common.collect.Sets;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.context.ApplicationContext;
|
|
|
import tech.powerjob.common.enums.ProcessorType;
|
|
|
-import tech.powerjob.worker.common.utils.SpringUtils;
|
|
|
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
|
|
|
import tech.powerjob.worker.extension.processor.ProcessorBean;
|
|
|
import tech.powerjob.worker.extension.processor.ProcessorDefinition;
|
|
@@ -42,7 +41,7 @@ public class BuiltInSpringProcessorFactory implements ProcessorFactory {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- BasicProcessor basicProcessor = SpringUtils.getBean(processorDefinition.getProcessorInfo(), applicationContext);
|
|
|
+ BasicProcessor basicProcessor = getBean(processorDefinition.getProcessorInfo(), applicationContext);
|
|
|
return new ProcessorBean()
|
|
|
.setProcessor(basicProcessor)
|
|
|
.setClassLoader(basicProcessor.getClass().getClassLoader());
|
|
@@ -54,10 +53,31 @@ public class BuiltInSpringProcessorFactory implements ProcessorFactory {
|
|
|
}
|
|
|
|
|
|
private boolean checkCanLoad() {
|
|
|
- if (SpringUtils.inSpringEnv()) {
|
|
|
+ try {
|
|
|
+ ApplicationContext.class.getClassLoader();
|
|
|
return applicationContext != null;
|
|
|
+ } catch (Throwable ignore) {
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ private static <T> T getBean(String className, ApplicationContext ctx) throws Exception {
|
|
|
+ // 1. ClassLoader 存在,则直接使用 clz 加载
|
|
|
+ ClassLoader classLoader = ctx.getClassLoader();
|
|
|
+ if (classLoader != null) {
|
|
|
+ return (T) ctx.getBean(classLoader.loadClass(className));
|
|
|
+ }
|
|
|
+ // 2. ClassLoader 不存在(系统类加载器不可见),尝试用类名称小写加载
|
|
|
+ String[] split = className.split("\\.");
|
|
|
+ String beanName = split[split.length - 1];
|
|
|
+ // 小写转大写
|
|
|
+ char[] cs = beanName.toCharArray();
|
|
|
+ cs[0] += 32;
|
|
|
+ String beanName0 = String.valueOf(cs);
|
|
|
+ log.warn("[SpringUtils] can't get ClassLoader from context[{}], try to load by beanName:{}", ctx, beanName0);
|
|
|
+ return (T) ctx.getBean(beanName0);
|
|
|
+ }
|
|
|
+
|
|
|
}
|