From 0f994a6f21282ef28a64531a3d01b9dbcf442df6 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sat, 25 Oct 2025 04:42:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=99=A8=E4=BB=BB=E5=8A=A1Be?= =?UTF-8?q?an=E6=89=AB=E6=8F=8F=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E5=AE=8C=E5=96=84=E6=87=92=E5=8A=A0=E8=BD=BDBean?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E5=8F=8A=E8=BF=87=E6=BB=A4=E6=9C=BA=E5=88=B6?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 9 +-- .../executor/impl/XxlJobSpringExecutor.java | 64 ++++++++----------- 2 files changed, 31 insertions(+), 42 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index e0755a33..71c76e8a 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2580,10 +2580,11 @@ public void execute() { - 8、【修复】调度预读任务数量调整,改为调度线程池大小x10,降低事务颗粒度,提升性能及稳定性; - 9、【优化】调度不重不漏逻辑优化:调度时间轮单刻度数据去重,避免极端情况下任务重复执行;时间轮转动时校验临近刻度,避免极端情况下遗漏刻度; - 10、【重构】调度过期策略、调度类型策略逻辑重构,代码组件化拆分并完善日志,提升健壮性及可维护性; -- 11、【ING】UI框架重构升级,提升交互体验; -- 12、【ING】调整资源加载逻辑,移除不必要的拦截器逻辑,提升页面加载效率; -- 13、【ING】规范API交互协议,通用响应结构体调整为Response; -- 14、【ING】Http通讯组件升级,基于接口代理方式重构; +- 11、【优化】执行器任务Bean扫描逻辑优化,完善懒加载Bean检测及过滤机制; +- 12、【ING】UI框架重构升级,提升交互体验; +- 13、【ING】调整资源加载逻辑,移除不必要的拦截器逻辑,提升页面加载效率; +- 14、【ING】规范API交互协议,通用响应结构体调整为Response; +- 15、【ING】Http通讯组件升级,基于接口代理方式重构; ### TODO LIST diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java index 4157d40b..44462f83 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java @@ -8,9 +8,10 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; -import org.springframework.context.annotation.Lazy; +import org.springframework.context.support.GenericApplicationContext; import org.springframework.core.MethodIntrospector; import org.springframework.core.annotation.AnnotatedElementUtils; @@ -33,9 +34,6 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC @Override public void afterSingletonsInstantiated() { - // init JobHandler Repository - /*initJobHandlerRepository(applicationContext);*/ - // init JobHandler Repository (for method) initJobHandlerMethodRepository(applicationContext); @@ -56,29 +54,11 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC super.destroy(); } - - /*private void initJobHandlerRepository(ApplicationContext applicationContext) { - if (applicationContext == null) { - return; - } - - // init job handler action - Map serviceBeanMap = applicationContext.getBeansWithAnnotation(JobHandler.class); - - if (serviceBeanMap != null && serviceBeanMap.size() > 0) { - for (Object serviceBean : serviceBeanMap.values()) { - if (serviceBean instanceof IJobHandler) { - String name = serviceBean.getClass().getAnnotation(JobHandler.class).value(); - IJobHandler handler = (IJobHandler) serviceBean; - if (loadJobHandler(name) != null) { - throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts."); - } - registJobHandler(name, handler); - } - } - } - }*/ - + /** + * init job handler from method + * + * @param applicationContext applicationContext + */ private void initJobHandlerMethodRepository(ApplicationContext applicationContext) { if (applicationContext == null) { return; @@ -87,12 +67,28 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC String[] beanDefinitionNames = applicationContext.getBeanNamesForType(Object.class, false, false); // allowEagerInit=false, avoid early initialization for (String beanDefinitionName : beanDefinitionNames) { - // filter system bean + // skip system bean if (isSystemBean(beanDefinitionName)) { continue; } - // get bean + // skip lazy bean + if (applicationContext instanceof GenericApplicationContext genericApplicationContext) { + if (!genericApplicationContext.containsBeanDefinition(beanDefinitionName)) { + continue; + } + // valid lazy bean + BeanDefinition beanDefinition = genericApplicationContext.getBeanDefinition(beanDefinitionName); + if (beanDefinition.isLazyInit()) { + logger.debug("xxl-job bean-definition scan, skip lazy-init bean:{}", beanDefinitionName); + continue; + } + } + + // load bean + Object bean = applicationContext.getBean(beanDefinitionName); + /* + skip lazy bean2 Object bean = null; Lazy onBean = applicationContext.findAnnotationOnBean(beanDefinitionName, Lazy.class); if (onBean!=null){ @@ -101,6 +97,7 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC }else { bean = applicationContext.getBean(beanDefinitionName); } + */ // filter method Map annotatedMethods = null; // referred to :org.springframework.context.event.EventListenerMethodProcessor.processBean @@ -149,13 +146,4 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC return applicationContext; } - /* - BeanDefinitionRegistryPostProcessor - registry.getBeanDefine() - @Override - public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { - this.registry = registry; - } - * */ - }