xxl-job 这段代码反射执行方法是不是把执行参数给丢了

6jjcrrmo  于 2021-11-29  发布在  Java
关注(0)|答案(4)|浏览(314)

xxl-job/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/MethodJobHandler.java

Line 29 in ff73b1a

| | method.invoke(target, newObject[paramTypes.length]); // method-param can not be primitive-types |

这里为了能够正确执行到目标方法,只是构建了一个对象数组,但是并没有将正确的参数值给到目标方法

1szpjjfi

1szpjjfi1#

逻辑修改

public void execute() throws Exception {
        Class<?>[] paramTypes = this.method.getParameterTypes();
        if (paramTypes.length > 0) {
            String jobParam = XxlJobContext.getXxlJobContext().getJobParam();
            Object[] objs = new Object[paramTypes.length];
            if (null != jobParam && !"".equalsIgnoreCase(jobParam.trim())) {
                objs[0] = jobParam;
            }

            this.method.invoke(this.target, objs);
        } else {
            this.method.invoke(this.target);
        }

    }

即可接收到jobParam

qyzbxkaa

qyzbxkaa2#

2.3.0版本已经改用XxlJobHelper.getJobParam的方式获取方法入参了,所以这个地方源码这样应该是不会影响功能的吧

06odsfpq

06odsfpq3#

惭愧惭愧,2.3.0的这个使用方法我刚知道,我是从2.2.0升级2.3.0的,照着demo改完之后突然发现参数丢了,这把我给急的。。。没仔细看2.3.0的realse 说明,太失败了

rpppsulh

rpppsulh4#

一样啊 真的惭愧,

相关问题