irpas技术客

PowerJob--SpringBoot整合--使用/教程/实例_IT利刃出鞘_powerjob springboot

网络 1857

原文网址:PowerJob--SpringBoot整合--使用/教程/实例_IT利刃出鞘的博客-CSDN博客

简介

说明

????????本文用示例介绍Power Job的用法。

? ? ? ? PowerJob是一个定时任务中间件(框架),优点很多,PowerJob官网的对比图中可以看到PowerJob比Quartz、XXL-JOB等更加优秀。

????????个人认为XXL-JOB与PowerJob各有优缺点,它们的对比见:SpringBoot--定时任务--选型/对比/框架_IT利刃出鞘的博客-CSDN博客

官方

官网:http://·/powerjob/guidence/intro 快速开始:https://·/powerjob/guidence/nyio9g github:https://github.com/PowerJob/PowerJob

相关网址

PowerJob的特性:PowerJob 简介 · 语雀

实战 下载项目 git clone https://github.com/PowerJob/PowerJob.git

启动服务端

1.创建数据库(仅需要创建数据库):

CREATE DATABASE IF NOT EXISTS `powerjob-daily` DEFAULT CHARSET utf8mb4

2.修改配置文件

配置文件的说明:官方文档写的非常详细,此处不再赘述。

????????需要修改的地方为数据库配置:

spring.datasource.core.jdbc-urlspring.datasource.core.usernamespring.datasource.core.password

(当然,有 mongoDB 的同学也可以修改spring.data.mongodb.uri以获取完全版体验。)

本处我的配置为:

oms.env=DAILY logging.config=classpath:logback-dev.xml ####### Database properties(Configure according to the the environment) ####### spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.core.jdbc-url=jdbc:mysql://localhost:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai spring.datasource.core.username=root spring.datasource.core.password=222333 spring.datasource.core.hikari.maximum-pool-size=20 spring.datasource.core.hikari.minimum-idle=5 ####### MongoDB properties(Non-core configuration properties) ####### ####### configure oms.mongodb.enable=false to disable mongodb ####### oms.mongodb.enable=false ####### Email properties(Non-core configuration properties) ####### ####### Delete the following code to disable the mail ####### ####### DingTalk properties(Non-core configuration properties) ####### ####### Delete the following code to disable the DingTalk ####### ####### 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

3. 启动服务

启动此类:tech.powerjob.server.PowerJobServerApplication

即:

4. 注册应用

访问:http://127.0.0.1:7700/

注册应用。应用名:powerjob-agent-test;密码:111111

?

编写示例代码

????????进入示例工程(powerjob-worker-samples),修改配置文件连接powerjob-server并编写自己的处理器代码。

1. 修改配置文件

????????修改 powerjob-worker-samples 的 application.properties,将 powerjob.worker.app-name 改为刚刚在控制台注册的名称。

?application.properties(修改后的)

server.port=8081 spring.jpa.open-in-view=false ########### PowerJob-worker properties. ########### # Akka port, default is 27777 powerjob.worker.akka-port=27777 # Application name, used for grouping applications. Recommend to set the same value as project name. powerjob.worker.app-name=powerjob-agent-test # Address of PowerJob-server node(s). Ip:port or domain. Multiple addresses should be separated with comma. powerjob.worker.server-address=127.0.0.1:7700,127.0.0.1:7701 # Store strategy of H2 database. disk or memory. Default value is disk. powerjob.worker.store-strategy=disk # Max length of result. Results that are longer than the value will be truncated. powerjob.worker.max-result-length=4096 # Max length of appended workflow context . Appended workflow context value that is longer than the value will be ignore. powerjob.worker.max-appended-wf-context-length=4096

2. 编写自己的处理器

????????随便找个地方新建类,继承你想要使用的处理器(各个处理器的介绍可见官方文档,文档非常详细)。

? ? ? ? 源码里已有的处理器的示例代码:

这里为了简单演示,选择使用单机处理器BasicProcessor,新建类:

package tech.powerjob.samples.processors; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.sdk.BasicProcessor; import tech.powerjob.worker.log.OmsLogger; import java.util.Collections; /** * 单机处理器 示例 * * @author knife */ @Slf4j @Component public class MyStandaloneProcessorDemo implements BasicProcessor { @Override public ProcessResult process(TaskContext context) throws Exception { OmsLogger omsLogger = context.getOmsLogger(); omsLogger.info("处理器启动成功,context 是 {}.", context); log.info("单机处理器正在处理"); log.info(context.getJobParams()); omsLogger.info("处理器执行结束"); boolean success = true; return new ProcessResult(success, context + ": " + success); } }

3. 启动示例程序

直接运行主类:tech.powerjob.samples.SampleApplication

即:

再以另一个端口启动第二个客户端:

server.port=8082 spring.jpa.open-in-view=false ########### PowerJob-worker properties. ########### # Akka port, default is 27777 powerjob.worker.akka-port=27778 # Application name, used for grouping applications. Recommend to set the same value as project name. powerjob.worker.app-name=powerjob-agent-test # Address of PowerJob-server node(s). Ip:port or domain. Multiple addresses should be separated with comma. powerjob.worker.server-address=127.0.0.1:7700,127.0.0.1:7701 # Store strategy of H2 database. disk or memory. Default value is disk. powerjob.worker.store-strategy=disk # Max length of result. Results that are longer than the value will be truncated. powerjob.worker.max-result-length=4096 # Max length of appended workflow context . Appended workflow context value that is longer than the value will be ignore. powerjob.worker.max-appended-wf-context-length=4096

Idea启动两个同一程序的方法:

任务配置与运行

????????调度服务器与示例工程都启动完毕后,再次前往Web页面( http://127.0.0.1:7700/ ),进行任务的配置与运行。

配置任务

1. 登录

在首页输入框输入配置的应用名称,成功操作后会正式进入前端管理界面。

2. 创建任务

任务管理=> 新建任务(右上角)

执行结果

运行结果

可以看到,只会有一台机器在执行。我用的是单机处理器,它会选择一台最健康的机器进行执行。

执行记录

问题及解决

问题:我设置的是CRON,每5秒执行,但它实际15秒执行一次。

原因:Powerjob的CRON模式下,时间轮是15秒扫描一次,这时间间隔不能小于15秒。若低于15秒会按15秒运行。

解决方案:改为固定频率或固定延迟进行。

修改设置如下:

执行结果:


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #powerjob #springboot #本文用示例介绍Power