QuickTask動態指令碼支援框架整體介紹篇

一灰灰發表於2019-02-23

logo

上篇博文: 動態任務執行框架想法篇

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. 設計原理

基本結構如下圖

指令碼框架.png

從圖中基本上也可以看出,這個專案的結構屬於非常輕量級的,核心角色,有下面幾個

  • Task : 具體的任務指令碼
  • TaskContainer: 持有執行任務的容器
  • TaskChangeWatcher: 任務觀察器,用於檢視是否有新增、刪除or修改任務,從而解除安裝舊的任務,並載入新的任務

另外一塊屬於擴充套件方面的外掛體系,目前並沒有給與實現,若將本框架繼承在Spring生態體系中執行時,這些外掛的支援就特別簡單了

  • RedisTemplate
  • RestTemplate
  • AmqpTemplate
  • xxxTemplate

III. 其他

0. 相關

博文:

專案:

1. 一灰灰Blog: https://liuyueyi.github.io/hexblog

一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 宣告

盡信書則不如,已上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

3. 掃描關注

blogInfoV2.png

相關文章