QuickTask动态脚本支持框架整体介绍篇

logo

Quick-Task 动态脚本支持框架整体介绍篇

一个简单的动态脚本调度框架,支持运行时,实时增加,删除和修改动态脚本,可用于后端的进行接口验证、数据订正,执行定时任务或校验脚本

本项目主要涉及到的技术栈:

  • groovyEngine (groovy脚本加载执行)
  • commons-io (文件变动监听)

<!-- more -->

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. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

小灰灰Blog&公众号

QrCode

知识星球

zhishi

原文链接:https://liuyueyi.github.io/hexblog/2018/07/02/180702-QuickTask%E5%8A%A8%E6%80%81%E8%84%9A%E6%9C%AC%E6%94%AF%E6%8C%81%E6%A1%86%E6%9E%B6%E6%95%B4%E4%BD%93%E4%BB%8B%E7%BB%8D%E7%AF%87/

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏13blog.site

小测试

可以在 @RequestMapping 注解里面加上 method=RequestMethod.GET 或者使用 @GetMapping 注解

1821
来自专栏ml

c/c++----网站及其后门(CGI应用程序)

      C/C++学习到这儿,结合自己曾经学过的javasweb知识,现在让我们来看看,如何做一个CGI程序吧!       首先了解一下啥子叫CGI  :...

3464
来自专栏coding

oh-my-zsh,让你的终端从未这么爽过

7.2K5
来自专栏Kevin-ZhangCG

[ SSH框架 ] Hibernate框架学习之一

 CRM(Customer Realationship Management)客户关系管理,是利用相应的技术信息以及互联网技术来协调企业与顾客间在销售、营销和...

3567
来自专栏美团技术团队

分布式系统互斥性与幂等性问题的分析与解决

前言 随着互联网信息技术的飞速发展,数据量不断增大,业务逻辑也日趋复杂,对系统的高并发访问、海量数据处理的场景也越来越多。如何用较低成本实现系统的高可用、易伸缩...

5404
来自专栏挖掘大数据

如何高效地合并Spark社区PR到自己维护的分支

最近刚刚忙完Spark 2.2.0的性能测试及Bug修复,社区又要发布2.1.2了,国庆期间刚好有空,过了一遍2.1.2的相关JIRA,发现有不少重要修复2.2...

3698
来自专栏大宽宽的碎碎念

为什么DB连接管理一般不采用IO多路复用?

3388
来自专栏一只程序汪的自我修养

使用requirejs编写模块化代码

2435
来自专栏程序员叨叨叨

compileSdkVersion 'android-24' requires JDK 1.8 or later to compile

今天,好久没有写Android程序的我突发奇想,想简单写一个每日任务APP。好的!新建工程->写好代码框架->开启模拟器->运行!哎哎哎?!那啥!咋报错了嘞?!...

1164
来自专栏扎心了老铁

使用beanstalkd实现定制化持续集成过程中pipeline

持续集成是一种项目管理和流程模型,依赖于团队中各个角色的配合。各个角色的意识和配合不是一朝一夕能练就的,我们的工作只是提供一种方案和能力,这就是持续集成能力的服...

3417

扫码关注云+社区

领取腾讯云代金券