如何通過編碼的方式手動觸發xxl job執行器

2022-06-14 13:42:13 字數 1849 閱讀 5144

xxl-job是乙個分布式任務排程平台,其核心設計目標是開發迅速、學習簡單、輕量級、易擴充套件、開箱即用。我部門大部分定時任務排程都是基於xxl-job,諸如報表統計、定時資料同步等。

今天的素材**於某天產品經理想在定時同步報表資料的基礎上,再增加乙個手動觸發報表資料同步的功能。即在報表頁面上新增乙個手動同步的按鈕,觸發該按鈕就可以執行報表資料同步

1、保留定時同步功能,同時新增手動同步

2、手動同步的資料產生的效果要和定時資料同步的產生效果一樣

1、方案

一、新建乙個手動呼叫的controller,controller觸發資料同步邏輯service

其實就是把寫在xxl-job執行器裡面的同步邏輯,再放到controller執行一遍

2、方案

二、新建乙個手動呼叫的controller,在controller裡面直接觸發xxl-job執行器

在原先的定時器場景,我們為了避免定時器裡面的同步邏輯還沒完成,下次定時器就觸發導致資料同步不準確,我們在執行器裡面做一些手段進行規避,比如設定同步完成標誌位等。

如果基於方案一,方案看似可行,其實存在潛在的坑點。即定時器執行的時候,手動剛好觸發執行,或者反過來,手動觸發的時候,定時器也執行了。這樣就會導致資料同步執行多次,導致資料不準確。

後面我們調研了xxl-job,看到了xxl-job有提供restful風格觸發執行器的功能,這個功能簡直就是為我們量身定做,當手動呼叫的時候,觸發執行器,因為執行的是執行器裡面的呼叫邏輯,因此就會觸發我們為避免資料同步不準確所採取的手段

其具體介紹可以檢視官網,其鏈結如下

執行器 restful api

本例的核心**塊

@restcontroller

@api(tags = "xxl-job restful排程")

@profile("job")

@slf4j

public class xxljobcontroller ,accesstoken:{}", adminclientaddressurl,accesstoken);

executorbiz executorbiz = new executorbizclient(adminclientaddressurl, accesstoken);

returntretval = executorbiz.run(gettriggerparam());

log.info("retval:{}", json.tojsonstring(retval));

// 200 表示正常、其他失敗

if(retval.getcode() == 200)

return ajaxresult.error(retval.getmsg(),retval.getcode());

}private triggerparam gettriggerparam()

}

注:**中的demojobhandler,就是執行器裡面的排程方法。形如下

/**

* 1、簡單任務示例(bean模式)

*/@xxljob("demojobhandler")

public returntdemojobhandler(string param) throws exception

如果選用方案一,也不是不行,就還得做一些改造,比如增加全域性標誌位,而且在設定標誌位的時候,還要考慮併發場景下,可能出現的問題。因此還不如直接採用方案二。方案的選擇一定得要基於業務場景進行考量,不基於業務場景,談技術方案,很容易採坑

通過rpm方式手動公升級linux的ssh版本

安裝telnet並開啟 防止ssh公升級失敗後無法連線伺服器,可通過telnet方式連線伺服器預設埠是23 rpm ivh xinetd 2.3.14 39.el6 4.x86 64.rpm rpm ivh telnet server 0.17 47.el6 3.1.x86 64.rpm servi...

如何判斷檔案的編碼方式

最近做東西需要知道檔案 txt,html.究竟是什麼編碼方式,不然讀取檔案內容可能出現亂碼 經過網上查詢發現兩種總結一下,方便自己也方便別人 通過判斷檔案頭,不過檔案頭不是必須的,所以有些檔案是沒有檔案頭的 ef bb bf utf 8 fe ff utf 16 ucs 2,little endia...

Oracle通過觸發器和序列的方式實現自增

觸發器格式 create or replace trigger 觸發器名字 before insert on 資料表名字 for each row declare nextid number begin if new.自增的列名 is null or new.自增的列名 0 then select ...