初次体验 分布式任务调度平台 xxl-job ,参考官网
详细的介绍 ,相信你也可以快速地在项目里整合起来。
废话不多说,在我启动执行器的项目的时候,竟然启动失败了, 直接po上我遇到的问题:
一开始看着控制台的错误日志,一直以为是请求 http://127.0.0.1:8080/xxl-job-admin/api 由于没有xxl-job-admin的成功登录,被拦截并重定向了login 页面,我还傻傻的去改了 xxl-job-admin 下的 拦截器代码,再重启 xxl -job -admin ,还是报同样的错误 。
后来又继续纠结 那个 9999端口,记得在执行器的项目的application.properties 里配置了个9999
查了下 , 只有在XxlJobConfig.java 配置类里看到了引用,百思不得其解, 错哪了呢?
解决思路:
xxl-job 的开发者不是已经提供了很多sample的嘛。好好看,仔细看看,
咦,sample里怎么用的是@XxlJob 来声明每个任务呢,我还在使用@JobHandler。好吧,明显我的版本比sample里的旧嘛。
查了下sample的引用的xxl-job-core版本
<version>2.2.1-SNAPSHOT</version>
但是要注意的是,这里很明显 ,2.2.1-SNAPSHOT 是一个本地的jar 包,因为我把源码全部下载下来了。这三个项目都是本地引用的。
最终解决办法:
参考sample , 升级xxl-job的版本 ,没商量了,因为百度了很久,也没发现哪个网友提出了解决方法,应该是我自己的版本引用的不对吧。毕竟我的xxl-job-admin 也就是管理模块 也是直接取当时码云上源码的最新代码。
主要步骤:
- pom 文件重新导入。参考当时maven repository 官网找到和 2.2.1-SNAPSHOT 版本接近的 ,那就是 2.2.0 了。
- XxlJobConfig.java 文件 直接从 sample里粘贴过来
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
- 任务类从@JobHandler 转成 @XxlJob 的写法
//新版本
@Component
@Slf4j
public class DemoJobHandler {
@XxlJob(value = "demoJobHandler")
public ReturnT<String> execute(String s) throws Exception {
System.out.println("=====hello world=====");
return ReturnT.SUCCESS;
}
}
//旧版本
@JobHandler(value = "demoJobHandler")
@Component
@Slf4j
public class DemoJobHandler extends IJobHandler {
@Override
public ReturnT<String> execute(String s) throws Exception {
System.out.println("=====hello world=====");
return ReturnT.SUCCESS;
}
}
启动成功后的日志:
最终教训
多看官方文档,多看官方提供的案例,注意下版本版本版本统一!