PowerJob 的容器技术允许开发者开发独立于 Worker 项目之外 Java 处理器,简单来说,就是以 Maven 工程项目的维度去组织一堆 Java 文件(开发者开发的众多脚本处理器),进而兼具开发效率和可维护性。
该容器为 JVM 级容器,而不是操作系统级容器(Docker)。
●比如,突然出现了某个数据库数据清理任务,与主业务无关,写进原本的项目工程中不太优雅,这时候就可以单独创建一个用于数据操作的容器,在里面完成处理器的开发,通过 PowerJob 的容器部署技术在 Worker 集群上被加载执行。
●比如,常见的日志清理啊,机器状态上报啊,对于广大 Java 程序员来说,也许并不是很会写 shell 脚本,此时也可以借用 agent+容器 技术,利用 Java 完成各项原本需要通过脚本进行的操作。
(感觉例子举的都不是很好…这个东西嘛,只可意会不可言传,大家努力理解一下吧~超好用哦~)
OpenAPI 允许开发者通过接口来完成手工的操作,让系统整体变得更加灵活。开发者可以基于 API 便捷地扩展PowerJob 原有的功能,比如,全面定制自己的任务调度策略。
换句话说,通过 OpenAPI,可以让接入方自己实现 PowerJob 的整个任务管理与调度模块。
最新依赖版本请参考 Maven 中央仓库:推荐地址 & 备用地址。
<dependency>
<groupId>tech.powerjob</groupId>
<artifactId>powerjob-client</artifactId>
<version>${latest.powerjob.version}</version>
</dependency>
通过 OpenAPI 停止某个任务实例。
// 初始化 client,需要server地址和应用名称作为参数
PowerJobClient client = new PowerJobClient("127.0.0.1:7700", "oms-test", "password");
// 调用相关的API
client.stopInstance(1586855173043L)
工作流描述了任务与任务之间的依赖关系,比如我现在有 A、B、C、D 四个任务,我希望 A 任务运行完毕后才开始运行 B、C 任务,最后再运行 D 任务。这就形成了一个依赖关系,可以通过有向无环图(DAG)来描述这个关系,如下图所示。
对于一些通用的任务,PowerJob 官方编写了可开箱即用的 Processor 来方便各位使用!您只需要引入以下依赖即可享受所有现成的强大的官方处理器!
最新版本请自行从中央仓库获取:点击直达
<dependency>
<groupId>tech.powerjob</groupId>
<artifactId>powerjob-official-processors</artifactId>
<version>${latest.version}</version>
</dependency>
每个官方处理器的详细使用方法请仔细阅读文档,有任何疑惑建议直接阅读源码!
由于 JSON 内传递许多参数涉及到转义,强烈建议先用 Java 代码生成配置(JSONObject#put),再调用 toJSONString 方法生成参数。
全限定类名 tech.powerjob.official.processors.impl.script.ShellProcessor
任务参数:填写需要处理的 Shell 脚本(直接复制文件内容)或脚本下载链接(http://xxx)
全限定类名 tech.powerjob.official.processors.impl.script.PythonProcessor
注意:Python 处理器会使用机器的 python 命令执行,因此 python 版本需要与本机 python 环境保持一致!
任务参数:填写需要处理的 Python 脚本(直接复制文件内容)或脚本下载链接(http://xxx)
全限定类名 tech.powerjob.official.processors.impl.HttpProcessor
任务参数(JSON):
*application/json*
**注意:文件删除是高危操作,请慎用该处理器。**默认情况下该处理器不可用,需要传入 JVM 参数
-Dpowerjob.official-processor.file-cleanup.enable=true
开启
全限定类名 tech.powerjob.official.processors.impl.FileCleanupProcessor
任务参数(JSONArray):整体参数为 array,array 中的每个元素为 JSON,描述需要清理的资源,每个节点的参数如下:
由于 JSON 内传递正则表达式需要转义,强烈建议先用 Java 代码生成配置(JSONObject#put, JSONArray#add),再调用 toJSONString 方法生成参数。
目前内置了两款 SQL 处理器,均支持自定义 SQL 的校验、解析逻辑,主要区别在于数据源连接的获取方式不同。
任务参数(JSON)
SpringDatasourceSqlProcesssor
生效,非必填,默认使用 default
数据源DynamicDatasourceSqlProcessor
生效,必填建议生产环境使用 AbstractSqlProcessor#registerSqlValidator
方法至少注册一个 SQL 校验器拦截掉非法 SQL,比如 truncate、drop 此类危险操作,或者在数据库账号的权限上做管控。如果需要自定义 SQL 解析逻辑,比如 宏变量替换,参数替换 等,则可以通过指定 AbstractSqlProcessor.SqlParser
来实现。
全限定类名 tech.powerjob.official.processors.impl.sql.SpringDatasourceSqlProcessor
默认情况下在初始化的时候需要至少注入一个数据源,所以必须提前手动初始化并注册到 Spring IOC 容器中,以 SpringBean 的方式进行加载。
允许使用 SpringDatasourceSqlProcessor#registerDataSource
方法注册多个数据源
建议:最好将该 SQL Processor 用的数据库连接池和其他业务模块用的数据库连接池隔离开**,不要共用一个连接池!**
默认情况下该处理器不可用,需要传入 JVM 参数 -Dpowerjob.official-processor.dynamic-datasource.enable=true
开启
全限定类名 tech.powerjob.official.processors.impl.sql.DynamicDatasourceSqlProcessor
支持通过参数动态指定数据源连接,在指定的数据库执行 SQL。
全限定类名 tech.powerjob.official.processors.impl.context.InjectWorkflowContextProcessor
( since v1.2.0 )
该处理器会从任务参数中加载数据,尝试将其解析成 Map ,如果解析成功,则会将其注入到工作流上下文中。
注意,参数必须是一个HashMap<String, Object>
的 JSON 串形式,否则会解析失败。
注意:该 Processor 主要用于一些需要注入固定上下文的工作流场景,作为单个任务执行是没有任何意义的