Dubbo 整合 quartz NullPointerException错误解决

编程教程 > Java (2696) 2025-01-27 10:23:06

环境信息

  • dubbo 2.6.5
  • spring-boot-starter-quartz 2.0.6.RELEASE
  • spring boot 2.0.6.RELEASE

NPE错误信息

org.quartz.SchedulerException: Job instantiation failed
    at org.springframework.scheduling.quartz.AdaptableJobFactory.newJob(AdaptableJobFactory.java:47) ~[spring-context-support-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.quartz.core.JobRunShell.initialize(JobRunShell.java:127) ~[quartz-2.3.0.jar:na]
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:392) [quartz-2.3.0.jar:na]
Caused by: java.lang.NullPointerException: null
    at com.alibaba.dubbo.config.spring.beans.factory.annotation.DubboConfigBindingBeanPostProcessor.postProcessBeforeInitialization(DubboConfigBindingBeanPostProcessor.java:79) ~[dubbo-2.6.5.jar:2.6.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1686) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:407) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.boot.autoconfigure.quartz.AutowireCapableBeanJobFactory.createJobInstance(AutowireCapableBeanJobFactory.java:45) ~[spring-boot-autoconfigure-2.0.6.RELEASE.jar:2.0.6.RELEASE]
    at org.springframework.scheduling.quartz.AdaptableJobFactory.newJob(AdaptableJobFactory.java:43) ~[spring-context-support-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    ... 2 common frames omitted
​

 

NullPointerException 原因分析

spring-boot-autoconfigure-2.0.2.RELEASE.jar->AutowireCapableBeanJobFactory.java

    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object jobInstance = super.createJobInstance(bundle);
        this.beanFactory.autowireBean(jobInstance);
        this.beanFactory.initializeBean(jobInstance, (String)null);
        return jobInstance;
    }

注意,上面创建job实列时候,赋值的bean的name为 `null

 

dubbo-2.6.5.jar>DubboConfigBindingBeanPostProcessor.java

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (beanName.equals(this.beanName) && bean instanceof AbstractConfig) {
            AbstractConfig dubboConfig = (AbstractConfig)bean;
            this.bind(this.prefix, dubboConfig);
            this.customize(beanName, dubboConfig);
        }
​
        return bean;
    }

提示,dubbo在使用beanName的时候未作空验证,导致NullPointerException

 

解决办法

根据dubbo的说法升级spring boot 版本,参考https://github.com/apache/dubbo/issues/2429

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
        <relativePath/> 
    </parent>

测试通过,升级到 2.1.9.RELEASE , 2.1.18.RELEASE2.3.5.RELEASE

 

application.properties 文件增加配置

spring.main.allow-bean-definition-overriding=true

提示:如果application.properties文件不添加上方配置可能在启动时候报错当dubbo版本为(2.6.9)时候,2.6.5版本不会


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
环境信息dubbo 2.6.5spring-boot-starter-quartz 2.0.6.RELEASEspring boot 2.0.6.RELEASENPE错误信息org.quartz...
Spring Boot 2.0是spring boot项目的最新版本,这里讲讲解整合Quartz Job实现任务调度增强功能。向QuartzJobBean注入Spring Boot 2.0 的S...
我们要达到这样的效果是在Quartz的Job实现类中引入spring 容器的服务,如下面源码参考:public class CancelUnpaidOrderT
学习配置Quartz调度程序以运行使用Spring启动Java配置配置的Spring批处理作业。虽然,Spring的默认调度程序也很好,但是quartz可以更好地以更可配置的方式调度和调用任务。...
Java编程中如何避免NullPointerException(空指针异常)
1. 什么是 spring cloud?spring cloud 是一系列框架的有序集合
spring boot 项目启动报错 Failed to start bean 'documentationPluginsBootstrapper'; nested exception i...
问题描述JavaFX maven项目在idea中启动报错:Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMet...
前言引用之前的例子《Vert.x 4 Web REST CRUD接口应用》项目作为基础进行修改,创建一个自定义异常和异常拦截处理器。以实现对指定异常返回特殊数据
Java原生实现RSA非对称加加密,源码参考:import java.io.BufferedReader;import java.io.File;import
从Spring 6和Spring Boot 3开始,Spring框架支持“HTTP API的问题详细信息”规范RFC 7807。本Spring Boot 教程将详细指导您完成这一新增强。1.问题...
简介       Apache Log4j2是对Log4j 1.x的升级,在性能上进行了重大改进,改进了配置文件的自动重装,Java 8 lambda支持和自定义日志级别,从而对Log4j 1....
ConsoleAppender概述       Log4j2 ConsoleAppender将应用程序生成的日志事件附加到System.out或System.err中
//声明一个List集合List&lt;Person&gtl; list = new ArrayList();           list.add(new Person("1001", "小A...
概述       学习配置log4j2.properties文件以将日志语句输出到控制台,滚动文件等