定时任务之PowerJob讲解
1 PowerJob
1.1 简介
PowerJob
是基于java开发的企业级的分布式任务调度平台,与 xxl-job
一样,基于web页面实现任务调度配置与记录,使用简单,上手快速
官网文档:http://www.powerjob.tech/
点击此处了解 xxl-job API方式接入 讲解
1.2 特性
主要功能特性如下:
- 使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。
- 定时策略完善:支持 CRON 表达式、固定频率、固定延迟和API四种定时调度策略。
- 执行模式丰富:支持单机、广播、Map、MapReduce 四种执行模式,其中 Map/MapReduce 处理器能使开发者寥寥数行代码便获得集群分布式计算的能力。
- 工作流支持:支持在线配置任务依赖关系(DAG),以可视化的方式对任务进行编排,同时还支持上下游任务间的数据传递,以及多种节点类型(判断节点 & 嵌套工作流节点)。
- 执行器支持广泛:支持 Spring Bean、内置/外置 Java 类,另外可以通过引入官方提供的依赖包,一键集成 Shell、Python、HTTP、SQL 等处理器,应用范围广。
- 运维便捷:支持在线日志功能,执行器产生的日志可以在前端控制台页面实时显示,降低 debug 成本,极大地提高开发效率。
- 依赖精简:最小仅依赖关系型数据库(MySQL/PostgreSQL/Oracle/MS SQLServer…)
- 高可用 & 高性能:调度服务器经过精心设计,一改其他调度框架基于数据库锁的策略,实现了无锁化调度。部署多个调度服务器可以同时实现高可用和性能的提升(支持无限的水平扩展)。
- 故障转移与恢复:任务执行失败后,可根据配置的重试策略完成重试,只要执行器集群有足够的计算节点,任务就能顺利完成。
相对于其他定时任务框架具有无锁化设计,更强悍的性能支撑,我们通过官网的产品对比可以了解详情:
QuartZ | xxl-job | SchedulerX 2.0 | PowerJob | |
---|---|---|---|---|
定时类型 | CRON | CRON | CRON、固定频率、固定延迟、OpenAI | CRON、固定频率、固定延迟、OpenAI |
任务类型 | 内置Java | 内置Java、Glue Java、Shell、Python等脚本 | 内置Java、外置Java(FatJar)、Shell、Python等脚本 | 内置Java、外置Java(容器)、Shell、Python等脚本 |
分片式任务 | 无 | 静态分片 | MapReduce动态分片 | MapReduce动态分片 |
在线治理任务 | 不支持 | 支持 | 支持 | 支持 |
日志白屏化 | 不支持 | 支持 | 不支持 | 支持 |
调度方式及性能 | 基于数据库锁,有性能瓶颈 | 基于数据库锁,有性能瓶颈 | 无锁化设计,性能强劲无上限 | |
报警监控 | 无 | 邮件 | 短信 | 邮件,提供接口允许二次开发 |
系统依赖 | 关系型数据库(MySQL、Oracle等) | MySQL | 不直接依赖于特定的数据库,与其他服务(如DataWorks)结合使用 | 任务SpringDataJpa支持的关系型数据库(MySQL、Oracle等) |
DAG工作流 | 不支持 | 不支持 | 支持 | 支持 |
因此,与传统的定时任务框架对比,PowerJob
支持更多的定时任务类型:
API
:通过客户端提供的api接口触发,服务端不会主动调度,适用于与业务服务上下连接或只调度一次的业务场景CRON
:通过cron表达式调度,这是多数定时任务框架都支持的固定频率
:每隔多少毫秒执行一次。固定延迟
:延迟多少毫秒执行一次工作流
:配合工作流进行调度,服务端不会主动调度,当工作流节点执行到该任务时运行。
1.3 安装
PowerJob
支持两种安装方式,一是通过jar包运行,一是通过docker安装
1.3.1 docker安装
docker可参考官方文档:https://www.yuque.com/powerjob/guidence/docker-compose
1.3.2 jar安装
如何通过jar形式运行的
1.3.2.1 下载源码
在github上下载源码,可以自己编译打包,下载地址:https://github.com/PowerJob/PowerJob
可以在releases中下载指定版本
在 IDE
中打开后,powerjob-server
就是我们要的服务端源码,可以直接编译,而 powerjob-worker-samples
就是springboot
下的使用示例
1.3.2.2 创建数据及修改配置文件
在运行编译服务端之前,我们需要先创建数据库,在指定的数据库下创建即可
CREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4
然后将 powerjob-server/powerjob-server-starter
下的 application-daily.properties
配置文件中的数据库配置改成修改后的服务器
其中daily,pre,product
表示日常、预生产、生产环境下的配置,与我们常见的dev, test, prod
类似,可以根据需要进行调整
其中还有邮箱及其他配置,如果有需要也可以调整,服务端的参数配置可参考官网文档。
1.3.2.3 启动
本地运行启动类 PowerJobServerApplication
一下试试,启动成功后,访问http://localhost:7700
,出现登陆页则说明运行成功
1.3.2.4 注册执行器
注册一个执行器,注意这里的应用名称不能顺便取,下文在客户端的配置的app-name
要与该名称保持一致
1.3.2.5 登录执行器
用该执行器名和密码登录
1.3.2.6 登录
如下,我们就登录成功了
1.3.2.7 发布到服务器
如果需要发布到服务器或虚拟机上运行,可以进行编译打包操作:
点击 mvn install
将依赖包打包到本地仓库
注意,如果这里报错,那么可以将maven的健康检查关闭。
Please refer to /Library/project/study/java/PowerJob-4.3.2/powerjob-server/powerjob-server-starter/target/surefire-reports for the individual test results.
执行mvn package打包项目
在powerjob-server-starter
的target
目录下即可看到打包出来的jar,将其上传到指定服务器,通过java -jar
指令即可运行
1.4 使用
1.4.1 创建项目
1.4.1.1 pom.xml
创建一个 springboot
项目,用于定时任务客户端,引入客户端依赖,如果是spring或其他java项目引入,可参考官网文档:
https://www.yuque.com/powerjob/guidence/ygonln
<dependency>
<groupId>tech.powerjob</groupId>
<artifactId>powerjob-worker-spring-boot-starter</artifactId>
<version>4.3.2</version>
</dependency>
1.4.1.2 配置文件
修改配置文件
powerjob:
worker:
enabled: true
enable-test-mode: false
# 数据传输端口,默认27777
port: 27777
# 应用名称,与服务端创建的应用账号的名称保持一致
app-name: powerjob-agent-test
# 服务端地址,多个用,隔开
server-address: 127.0.0.1:7700
# 通讯协议,4.3.0之后支持http和akka,4.3.0之前仅支持akka,官方推荐http
protocol: http
# 任务返回结果信息的最大长度,超过该值将被截断
max-result-length: 4096
# 同时运行的轻量级任务数量上限
max-lightweight-task-num: 1024
# 同时运行的重量级任务数量上限
max-heavy-task-num: 64
1.4.1.3 启动配置
启动类上添加注解 @EnableScheduling
1.4.1.4 任务示例类
通过申明 BasicProcessor
接口,实现process
方法来书写一个简单的定时任务示例类,注意要声明为bean
package com.example.powerjobdemo.job;
/**
* @Description 简单任务执行器
*/
@Component
public class SimpleJobServer implements BasicProcessor {
@Override
public ProcessResult process(TaskContext taskContext) throws Exception {
String jobParams = taskContext.getJobParams();
System.out.println("参数: " + jobParams);
System.out.println("定时任务执行");
return new ProcessResult(true, "定时任务执行成功");
}
}
1.4.1.5 启动项目
启动客户端项目,运行成功后,可以在服务端首页看到机器实例
1.4.2 管理定时任务
1.4.2.1 服务端任务管理
点击新建任务,其中处理器配置是通过书写处理器的全类路径名来声明的,比如这里是com.example.powerjobdemo.job.SimpleJobServer
1.4.2.2 查看任务
创建成功后,可以在列表看到新建的任务
1.4.2.3 测试定时任务
打开客户端控制台,也能看到输出的参数和执行打印,说明任务执行成功
同时我们可以在运行记录中看到执行日志
1.5 任务配置参数详解
创建任务时我们可以看到如下图所示的配置:
1.5.1 定时信息
主要选择定时任务类型,支持 API, CRON,固定频率、固定延迟、工作流、每日固定间隔
等几种定时任务类型。
1.5.2 生命周期
这是比其他任务框架更便捷的功能,指定了任务的生命周期,如果该任务是预定某时间段内执行的,可以通过该参数配置
1.5.3 执行配置
执行配置:
- 执行类型支持单机执行、广播执行、Map执行、MapReduce执行
- 单机执行表示只需要有一个节点执行任务即可的场景
- 广播执行表示需要全部节点一同执行的场景,比如清除机器日志、各节点数据统计
Map与MapReduce
执行都是表示分布式、分批执行,用来拆分计算量、耗时较大的任务,区别在于Map执行是一种简单的数据处理逻辑,特点是将输入数据拆分成多个子块,并交给多个分布式节点同时执行,以提高数据处理效率,适用于简单的数据处理场景MapReduce
执行是一种大数据处理框架,处理逻辑是将复杂的数据处理拆分成Map和Reduce
阶段进行处理,通过数据分组计算后合并来提供数据处理效率,更适合复杂的大数据场景
1.5.4 运行时配置
支持HEALTH_FIRST和RANDOM
,即第一个健康节点和随机,用于选择执行处理器节点的策略。
最大实例数用于控制处理器节点数量,线程并发度用于控制并发,运行时间限制
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤