上篇博文: 動態任務執行框架想法篇
Quick-Task 動態指令碼支援框架整體介紹篇
一個簡單的動態指令碼排程框架,支援執行時,實時增加,刪除和修改動態指令碼,可用於後端的進行介面驗證、資料訂正,執行定時任務或校驗指令碼
本專案主要涉及到的技術棧:
- groovyEngine (groovy指令碼載入執行)
- commons-io (檔案變動監聽)
I. 使用姿勢
1. pom配置
新增倉庫地址
<repositories>
<repository>
<id>yihui-maven-repo</id>
<url>https://raw.githubusercontent.com/liuyueyi/maven-repository/master/repository</url>
</repository>
</repositories>
複製程式碼
新增專案依賴
<dependency>
<groupId>com.git.hui</groupId>
<artifactId>task-core</artifactId>
<version>0.0.1</version>
</dependency>
複製程式碼
2. 使用demo
a. 原始碼方式
原始碼下載之後的使用case,可以參考 com.git.hui.task.AppLaunch
,執行main方法,監聽./task-core/src/test/java/com/git/hui/task
目錄下指令碼的變動即可
b. jar包引用
首先準備一個Groovy指令碼,放在指定的目錄下,如 /tmp/script/DemoScript.groovy
package com.git.hui.task
import com.git.hui.task.api.ITask
class DemoScript implements ITask {
@Override
void run() {
println name() + " | now > : >>" + System.currentTimeMillis()
}
@Override
void interrupt() {
println "over"
}
}
複製程式碼
對應的啟動類可以如下
public class AppRunner {
// main 方式
public static void main(String[] args) throws Exception {
new ScriptExecuteEngine().run("/tmp/script/");
Thread.sleep(24 *60 * 60 * 1000);
}
// junit 方式啟動
@Test
public void testTaskRun() {
new ScriptExecuteEngine().run("/tmp/script/");
Thread.sleep(24 *60 * 60 * 1000);
}
}
複製程式碼
c. 測試
應用啟動完畢之後
- 可以修改
/tmp/script/DemoScript.groovy
指令碼的內容,儲存後檢視是否關閉舊的指令碼並執行更新後的指令碼 - 測試在
/tmp/script
目錄下新增指令碼 - 測試刪除
/tmp/script
目錄下的指令碼 - 測試異常的case (如非法的groovy檔案,內部執行異常等…)
注意 不要在groovy指令碼中執行 System.exit(1)
, 會導致整個專案都停止執行
II. 設計原理
基本結構如下圖
從圖中基本上也可以看出,這個專案的結構屬於非常輕量級的,核心角色,有下面幾個
- Task : 具體的任務指令碼
- TaskContainer: 持有執行任務的容器
- TaskChangeWatcher: 任務觀察器,用於檢視是否有新增、刪除or修改任務,從而解除安裝舊的任務,並載入新的任務
另外一塊屬於擴充套件方面的外掛體系,目前並沒有給與實現,若將本框架繼承在Spring生態體系中執行時,這些外掛的支援就特別簡單了
- RedisTemplate
- RestTemplate
- AmqpTemplate
- xxxTemplate
III. 其他
0. 相關
博文:
專案:
1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛
2. 宣告
盡信書則不如,已上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840