在elastic-job詳解(三):Job的手動觸發功能一文中講到了如何手動觸發一個Job,但是我們手動觸發的時候常常需要輸入一些參數。舉個栗子:我們有個日統計報表,每天凌晨統計一次,統計上一天的數據。但我們發現幾天前的某一天的數據有問題,需要重跑統計。這就需要統計程序能執行指定某一天的數據。這個功能就可以使用自定義任務參數來輕松實現。自定義參數,可通過傳遞該參數為作業調度的業務方法傳參,用於實現帶參數的作業。例:每次獲取的數據量、作業實例從數據庫讀取的主鍵、執行某一天的任務等。
1. 支持自定義參數的代碼
要使用自定義參數,就必須要在你實現的任務中使用這個參數,下面我們來看一下具體實現的代碼:
public class MySimpleJob implements SimpleJob { Logger logger = LoggerFactory.getLogger("MyShardingJob1"); @Override public void execute(ShardingContext shardingContext) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String date; String param = shardingContext.getJobParameter(); date = param.isEmpty() ? sdf.format(new Date()) : param; doWork(date); } private void doWork(String date) { logger.info("Doing work."); } }
真正和業務處理方法doWork接收一個日期參數,如果自定義參數沒有則按照常規使用當前時間來進行統計,如果通過手動觸發給定了參數,則使用給定的參數來做任務。自定義參數是根據shardingContext.getJobParameter()來獲取。
2. 觸發自定義參數
代碼層面支持之后,我們來看一下怎么觸發。首先找到console管理界面,連上正在執行的任務,點擊“修改”按鈕。
進入任務修改界面,在自定義參數一欄添加參數,然后點擊更新。
最后,在圖1中點擊觸發按鈕。帶參數的任務就會被觸發。千萬不要忘記執行成功之后再次修改回來,避免每次執行都會使用這個自定義參數。
elastic-job內部是在zookeeper中修改任務config節點中”jobParameter”的數據。




