一个简单的动态脚本调度框架,支持运行时,实时增加,删除和修改动态脚本,可用于后端的进行接口验证、数据订正,执行定时任务或校验脚本
本项目主要涉及到的技术栈:
- groovyEngine (groovy脚本加载执行)
- commons-io (文件变动监听)
- commons-cli (命令行参数解析)
两种使用姿势,一是我自己搭的私服,好处是更新及时;另一个是jitpack,优点是其对应的包就是github中的release版本
case1:
添加仓库地址
<repositories>
<repository>
<id>YiHui-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>
case2:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
添加依赖
<dependency>
<groupId>com.github.liuyueyi</groupId>
<artifactId>quick-task</artifactId>
<version>v0.0.1</version>
</dependency>
源码下载之后的使用case,可以参考 com.git.hui.task.AppLaunch
,运行main方法,监听./task-core/src/test/java/com/git/hui/task
目录下脚本的变动即可
首先准备一个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);
}
}
应用启动完毕之后
- 可以修改
/tmp/script/DemoScript.groovy
脚本的内容,保存后查看是否关闭旧的脚本并执行更新后的脚本 - 测试在
/tmp/script
目录下新增脚本 - 测试删除
/tmp/script
目录下的脚本 - 测试异常的case (如非法的groovy文件,内部运行异常等...)
注意 不要在groovy脚本中执行 System.exit(1)
, 会导致整个项目都停止运行
基本结构如下图
从图中基本上也可以看出,这个项目的结构属于非常轻量级的,核心角色,有下面几个
- Task : 具体的任务脚本
- TaskContainer: 持有执行任务的容器
- TaskChangeWatcher: 任务观察器,用于查看是否有新增、删除or修改任务,从而卸载旧的任务,并加载新的任务
另外一块属于扩展方面的插件体系,目前并没有给与实现,若将本框架继承在Spring生态体系中运行时,这些插件的支持就特别简单了
- RedisTemplate
- RestTemplate
- AmqpTemplate
- xxxTemplate
涉及到技术点博文
框架相关博文
- 180628-动态任务执行框架想法篇
- 180702-QuickTask动态脚本支持框架整体介绍篇
- 180719-Quick-Task 动态任务执行框架之使用介绍篇
- 180723-Quick-Task 动态任务执行框架之结构设计篇
- 180729-Quick-Task 动态任务执行框架之任务动态加载
- 180807-Quick-Task 动态任务执行框架之Groovy脚本加载执行
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
- 微信: 一灰/liuyueyi25
公众号&博客
打赏码