本文源碼地址:源碼地址
分佈式定時任務,其實主要爲是爲了解決下面的幾個問題:
1、單節點不安全問題
2、多節點,重複執行的問題
3、任務調度的問題
所以在路由策略上不管選擇什麼基本上都是單節點執行,除非節點掛了,其他的節點纔會喚起。但是XXL-JOB提供了一種比較有意思的路由策略,分片路由
我的理解啊,這個應該是解決數據分片的問題出來的,現在的數據分庫分片已經是常用狀態了。首先我們來說下代碼實現吧
@Component
public class Demo2Handler {
@XxlJob(value = "demo3Job")
public ReturnT<String> demo3JobHandler(String param) throws Exception{
// 分片參數
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
// 業務邏輯
for (int i = 0; i < shardingVO.getTotal(); i++) {
if (i == shardingVO.getIndex()) {
System.out.println("demo3");
XxlJobLogger.log("第 {} 片, 命中分片開始處理", i);
} else {
XxlJobLogger.log("第 {} 片, 忽略", i);
}
}
return ReturnT.SUCCESS;
}
}
跟普通的代碼沒什麼區別。唯一的區別是每臺機器自動自行自己的任務,這個就是根據分片參數來定的。
//執行器數量
int number = shardingVO.getTotal();
//當前分片
int index = shardingVO.getIndex();
那麼這個可以用來幹嘛呢,比較有意思的一種應用。比如要處理一個比較大的數據表,如果單節點操作,就是全表掃描的咯。
那麼可能會比較慢,那麼如果我們把這個拆開給好幾個節點執行,那是不是就會快上很多呢,
SQL的簡單應用如下:
SELECT * FROM student
WHERE `status` = 0
AND mod(id,#{number}) = #{index} //number 分片總數,index當前分片數
order by id desc