初次體驗 分佈式任務調度平臺 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;
}
}
啓動成功後的日誌:
最終教訓
多看官方文檔,多看官方提供的案例,注意下版本版本版本統一!