问题来自于 #1379 ,追到源码是 com.xxl.job.core.biz.client.AdminBizClient 中的三个方法超时时间太短:硬编码为3秒。
@override public ReturnT callback(List callbackParamList) { return XxlJobRemotingUtil.postBody(addressUrl+"api/callback", accessToken, callbackParamList,3); }
@override public ReturnT registry(RegistryParam registryParam) { return XxlJobRemotingUtil.postBody(addressUrl + "api/registry", accessToken, registryParam, 3); }
@override public ReturnT registryRemove(RegistryParam registryParam) { return XxlJobRemotingUtil.postBody(addressUrl + "api/registryRemove", accessToken, registryParam, 3); }
而调用此类的类是 com.xxl.job.core.executor.XxlJobExecutor 中的方法 private void initAdminBizList(String adminAddresses, String accessToken) throws Exception { ...... AdminBiz adminBiz = new AdminBizClient(address.trim(), accessToken); ...... }
也是硬编码方式创建,没有注入到spring容器,进而无法使用在AdminBizClient类加上 @Component + @Value("xxl.job.client.http.timeout")注入值这样的方法进行超时时间配置。
最后解决方案是:我硬编码将3秒修改为30秒,替换class字节码到jar包解决。
希望作者能够重构通过注解配置动态设置此参数。