快速开始(本地IDE版)
官方教程:https://www.yuque.com/powerjob/guidence/quick_start
PowerJob 的设计目标为企业级的分布式任务调度平台,即成为公司内部的调度中间件。整个公司统一部署调度中心 powerjob-server,旗下所有业务线应用只需要依赖 powerjob-worker 即可接入获取任务调度与分布式计算能力,通过不同的 appName 相互隔离。
因此,PowerJob 由调度服务器(powerjob-server,Power Job服务系统)和执行器(powerjob-worker,你的业务系统上的定时任务)两部分组成,powerjob-server 负责提供 Web 服务和完成任务的调度,powerjob-worker 则负责执行用户所编写的任务代码,同时提供分布式计算能力。
以下为在本地开发环境快速搭建并试用 PowerJob 的教程。
下载power job代码------运行调度服务------开发配置业务系统处理器及配置项------配置定时任务。
STEP1: 初始化项目
-
下载Power Job 程序代码,
git clone https://github.com/PowerJob/PowerJob.git
-
导入 IDE,源码结构如下,我们需要启动调度服务器(powerjob-server),同时在 samples 工程中编写自己的处理器代码

STEP2: 启动调度服务器
-
创建数据库(仅需要创建数据库 ):找到你的 DB,运行 SQL CREATE DATABASE IF NOT EXISTS
powerjob-dailyDEFAULT CHARSET utf8mb4,搞定~ -
修改配置文件,配置文件的说明官方文档写的非常详细,此处不再赘述。
需要修改的地方(路径: PowerJob/powerjob-server/powerjob-server-starter/src/main/resources/application-daily.properties)为数据库配置spring.datasource.core.jdbc-url、spring.datasource.core.username和spring.datasource.core.password,当然,有 mongoDB 的同学也可以修改spring.data.mongodb.uri以获取完全版体验。
java
#参考配置文件代码
oms.env=DAILY
logging.config=classpath:logback-dev.xml
#修改数据库相关配置
spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.core.jdbc-url=jdbc:mysql://127.0.0.1:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.core.username=root
spring.datasource.core.password=root
spring.datasource.core.maximum-pool-size=20
spring.datasource.core.minimum-idle=5
#修改数据库相关配置
oms.storage.dfs.mysql_series.driver=com.mysql.cj.jdbc.Driver
oms.storage.dfs.mysql_series.url=jdbc:mysql://127.0.0.1:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
oms.storage.dfs.mysql_series.username=root
oms.storage.dfs.mysql_series.password=root
oms.storage.dfs.mysql_series.auto_create_table=true
####### 邮件配置(不需要邮件报警可以删除以下配置来避免报错) #######
#spring.mail.host=smtp.163.com
#spring.mail.username=zqq@163.com
#spring.mail.password=GOFZPNARMVKCGONV
#spring.mail.properties.mail.smtp.auth=true
#spring.mail.properties.mail.smtp.starttls.enable=true
#spring.mail.properties.mail.smtp.starttls.required=true
####### 钉钉配置 (不需要的话删除以下配置来避免报错) #######
#oms.alarm.ding.app-key=dingauqwkvxxnqskknfv
#oms.alarm.ding.app-secret=XWrEPdAZMPgJeFtHuL0LH73LRj-74umF2_0BFcoXMfvnX0pCQvt0rpb1JOJU_HLl
#oms.alarm.ding.agent-id=847044348
####### Resource cleaning properties #######
oms.instanceinfo.retention=1
oms.container.retention.local=1
oms.container.retention.remote=-1
####### Cache properties #######
oms.instance.metadata.cache.size=1024
####### Threshold in precise fetching server(0~100). 100 means full detection of server, in which #######
####### split-brain could be avoided while performance overhead would increase. #######
oms.accurate.select.server.percentage = 50
- 完成配置文件的修改后,可以直接通过启动类 tech.powerjob.server.PowerJobServerApplication 启动调度服务器(注意:需要使用 daily 配置文件启动,可自行百度搜索"SpringBoot 指定配置文件启动"),观察启动日志,查看是否启动成功~启动成功后,访问 http://127.0.0.1:7700/ ,如果能顺利出现 Web 界面,则说明调度服务器启动成功!
- 注册应用
○ v4.x及前序版本:点击主页应用注册按钮,填入 powerjob-worker-samples 和控制台密码(用于进入控制台),注册示例应用(当然你也可以注册其他的 appName,只是别忘记在示例程序中同步修改~)

○ v5.x 版本:
■ 选择 PowerJob Account进行登录,简单起见可直接使用超级管理员登录(账号 ADMIN,密码 powerjob_admin)

登录后,进入应用管理TAB,点击右上角新增进行应用注册即可。

STEP3: 编写示例代码
进入示例工程(powerjob-worker-samples),修改配置文件连接powerjob-server并编写自己的处理器代码。
1.修改 powerjob-worker-samples 的 application.properties,将 powerjob.worker.app-name 改为刚刚在控制台注册的名称。
kotlin
server.port=8081
spring.jpa.open-in-view=false
########### powerjob-worker 配置 ###########
# akka 工作端口,可选,默认 27777
powerjob.worker.akka-port=27777
# 接入应用名称,用于分组隔离,推荐填写 本 Java 项目名称
powerjob.worker.app-name=powerjob-worker-samples
# 调度服务器地址,IP:Port 或 域名,多值逗号分隔
powerjob.worker.server-address=127.0.0.1:7700,127.0.0.1:7701
# 持久化方式,可选,默认 disk
powerjob.worker.store-strategy=disk
# 任务返回结果信息的最大长度,超过这个长度的信息会被截断,默认 8192
powerjob.worker.max-result-length=4096
# 单个任务追加的工作流上下文最大长度,超过这个长度的会被直接丢弃,默认 8192
powerjob.worker.max-appended-wf-context-length=4096
2.编写自己的处理器:随便找个地方新建类,继承你想要使用的处理器(各个处理器的介绍可见官方文档,文档非常详细),这里为了简单演示,选择使用单机处理器 BasicProcessor,以下是代码示例。
java
@Slf4j
@Component
//单击执行示例
public class StandaloneProcessorDemo implements BasicProcessor {
@Override
public ProcessResult process(TaskContext context) throws Exception {
// PowerJob 在线日志功能,使用该 Logger 打印的日志可以直接在 PowerJob 控制台查看
OmsLogger omsLogger = context.getOmsLogger();
omsLogger.info("StandaloneProcessorDemo start process,context is {}.", context);
return new ProcessResult(true, "process successfully~");
}
}
- 启动示例程序,即直接运行主类 tech.powerjob.samples.SampleApplication,观察控制台输出信息,判断是否启动成功。
STEP4: 任务的配置与运行
调度服务器与示例工程都启动完毕后,再次前往Web页面( http://127.0.0.1:7700/ ),进行任务的配置与运行。
进入执行器应用的主界面
v4.x 及前序版本:在首页输入框输入配置的应用名称,成功操作后会正式进入前端管理界面

v5.x:在应用管理页面,选择对应的应用,点击右侧"进入"按钮即可。

进入注册应用首页后,出现如下图页面

新建任务
点击"任务管理" -> "新建任务"(右上角),开始创建任务。

可按下图说明填写参数

任务运行&运维
完成任务创建后,即可在控制台看到刚才创建的任务,如果觉得等待调度太过于漫长,可以直接点击运行按钮,立即运行本任务。

前往任务实例边栏,查看任务的运行状态和在线日志

基础的教程到这里也就结束了~
PowerJob Worker 与 Server 的通信机制
通信模式说明
1. 双向通信架构
- Worker 主动连接 Server:Worker 启动时主动连接 Server
- Server 控制 Worker:通过心跳机制实现任务调度和管理
- 长连接维持:建立持久的通信通道
2. 配置验证
根据 [application.properties](file:///E:/java/PowerJob/powerjob-worker-samples/src/main/resources/application.properties) 中的配置:
powerjob.worker.server-address:Worker 需要知道 Server 地址powerjob.worker.protocol:使用 HTTP 协议通信powerjob.worker.allow-lazy-connect-server:当前设置为false,强制验证连接
3. 通信流程
- 初始化连接:Worker 启动时连接到 Server
- 心跳机制:维持连接状态和任务状态同步
- 任务执行:Server 通过连接下发任务指令
- 结果回传:Worker 执行完成后将结果发送回 Server
4. 工作模式
- Server 作为控制中心:负责任务分发和调度
- Worker 作为执行节点:负责实际任务执行
- 双向数据流:任务下发和结果回传同时存在
所以是 Worker 既接受 Server 调度,也主动与 Server 通信,形成完整的分布式任务调度体系。
PowerJob 执行方式区别
执行类型分类
1. 单机执行(Standalone)
- 特点:任务在一个 Worker 节点上执行
- 适用场景:简单任务、不需要分布式处理的任务
- 优势:执行简单,资源消耗少
2. 广播执行(Broadcast)
- 特点:任务被发送到所有可用的 Worker 节点同时执行
- 适用场景:需要在所有节点执行相同操作的场景
- 应用场景:系统通知、配置更新、缓存清理等
3. MapReduce 执行
- 特点 :
- Map 阶段:将任务分解到多个 Worker 并行处理
- Reduce 阶段:汇总各节点处理结果
- 适用场景:大数据处理、复杂计算任务
- 优势:充分利用分布式计算能力,提高处理效率
通信机制
- 所有执行类型都通过
powerjob.worker.server-address配置的 Server 地址进行任务调度 - Worker 通过
powerjob.worker.protocol指定的协议与 Server 通信 - 任务执行状态和结果通过心跳机制反馈给 Server