SpringBoot整合PowerJob--使用/教程/实例

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

简介

说明

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

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

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

官方

官网:PowerJob
文档:PowerJob 简介 · 语雀
快速开始:快速开始(本地IDE版) · 语雀
github:GitHub - PowerJob/PowerJob: Enterprise job scheduling middleware with distributed computing ability.

相关网址

PowerJob的特性:PowerJob 简介 · 语雀

实战

下载项目

git clone https://github.com/PowerJob/PowerJob.git

启动服务端

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

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

2.修改配置文件

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

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

  1. spring.datasource.core.jdbc-url
  2. spring.datasource.core.username
  3. spring.datasource.core.password

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

本处我的配置为:

 
  1. oms.env=DAILY

  2. logging.config=classpath:logback-dev.xml

  3. ####### Database properties(Configure according to the the environment) #######

  4. spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver

  5. spring.datasource.core.jdbc-url=jdbc:mysql://localhost:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

  6. spring.datasource.core.username=root

  7. spring.datasource.core.password=222333

  8. spring.datasource.core.hikari.maximum-pool-size=20

  9. spring.datasource.core.hikari.minimum-idle=5

  10. ####### MongoDB properties(Non-core configuration properties) #######

  11. ####### configure oms.mongodb.enable=false to disable mongodb #######

  12. oms.mongodb.enable=false

  13. ####### Email properties(Non-core configuration properties) #######

  14. ####### Delete the following code to disable the mail #######

  15. ####### DingTalk properties(Non-core configuration properties) #######

  16. ####### Delete the following code to disable the DingTalk #######

  17. ####### Resource cleaning properties #######

  18. oms.instanceinfo.retention=1

  19. oms.container.retention.local=1

  20. oms.container.retention.remote=-1

  21. ####### Cache properties #######

  22. oms.instance.metadata.cache.size=1024

  23. ####### Threshold in precise fetching server(0~100). 100 means full detection of server, in which #######

  24. ####### split-brain could be avoided while performance overhead would increase. #######

  25. 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(修改后的)

 
  1. server.port=8081

  2. spring.jpa.open-in-view=false

  3. ########### PowerJob-worker properties. ###########

  4. # Akka port, default is 27777

  5. powerjob.worker.akka-port=27777

  6. # Application name, used for grouping applications. Recommend to set the same value as project name.

  7. powerjob.worker.app-name=powerjob-agent-test

  8. # Address of PowerJob-server node(s). Ip:port or domain. Multiple addresses should be separated with comma.

  9. powerjob.worker.server-address=127.0.0.1:7700,127.0.0.1:7701

  10. # Store strategy of H2 database. disk or memory. Default value is disk.

  11. powerjob.worker.store-strategy=disk

  12. # Max length of result. Results that are longer than the value will be truncated.

  13. powerjob.worker.max-result-length=4096

  14. # Max length of appended workflow context . Appended workflow context value that is longer than the value will be ignore.

  15. powerjob.worker.max-appended-wf-context-length=4096

2. 编写自己的处理器

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

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

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

 
  1. package tech.powerjob.samples.processors;

  2. import lombok.extern.slf4j.Slf4j;

  3. import org.springframework.stereotype.Component;

  4. import tech.powerjob.worker.core.processor.ProcessResult;

  5. import tech.powerjob.worker.core.processor.TaskContext;

  6. import tech.powerjob.worker.core.processor.sdk.BasicProcessor;

  7. import tech.powerjob.worker.log.OmsLogger;

  8. import java.util.Collections;

  9. /**

  10. * 单机处理器 示例

  11. *

  12. * @author knife

  13. */

  14. @Slf4j

  15. @Component

  16. public class MyStandaloneProcessorDemo implements BasicProcessor {

  17. @Override

  18. public ProcessResult process(TaskContext context) throws Exception {

  19. OmsLogger omsLogger = context.getOmsLogger();

  20. omsLogger.info("处理器启动成功,context 是 {}.", context);

  21. log.info("单机处理器正在处理");

  22. log.info(context.getJobParams());

  23. omsLogger.info("处理器执行结束");

  24. boolean success = true;

  25. return new ProcessResult(success, context + ": " + success);

  26. }

  27. }

3. 启动示例程序

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

即:

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

 
  1. server.port=8082

  2. spring.jpa.open-in-view=false

  3. ########### PowerJob-worker properties. ###########

  4. # Akka port, default is 27777

  5. powerjob.worker.akka-port=27778

  6. # Application name, used for grouping applications. Recommend to set the same value as project name.

  7. powerjob.worker.app-name=powerjob-agent-test

  8. # Address of PowerJob-server node(s). Ip:port or domain. Multiple addresses should be separated with comma.

  9. powerjob.worker.server-address=127.0.0.1:7700,127.0.0.1:7701

  10. # Store strategy of H2 database. disk or memory. Default value is disk.

  11. powerjob.worker.store-strategy=disk

  12. # Max length of result. Results that are longer than the value will be truncated.

  13. powerjob.worker.max-result-length=4096

  14. # Max length of appended workflow context . Appended workflow context value that is longer than the value will be ignore.

  15. 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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot是一个开源的Java开发框架,可以用于快速构建无服务器、微服务、单体和云原生应用程序。而MySQL Binlog Connector是一个用于解析MySQL二进制日志数据的工具,可以将数据库更改事件传递给外部应用程序。 要在Spring Boot整合MySQL Binlog Connector,首先需要在项目的pom.xml文件中添加所需的依赖。可以使用以下依赖来引入MySQL Binlog Connector: ```xml <dependency> <groupId>com.github.shyiko</groupId> <artifactId>mysql-binlog-connector-java</artifactId> <version>0.20.0</version> </dependency> ``` 完成依赖添加后,可以创建一个MySQLBinlogHandler类来处理数据库更改事件。该类需要实现BinaryLogClient.EventListener接口,并重写onEvent方法来处理不同的事件类型。 在onEvent方法中,可以根据事件类型进行相应的处理逻辑,例如插入、更新或删除数据。可以通过事件对象获取相关的表名、列名和新值等信息,并在此处编写自定义的业务逻辑。 为了让Spring Boot应用程序能够监听MySQL的二进制日志事件,需要在启动类中创建一个实例化BinaryLogClient,并设置相应的参数,例如MySQL主机名、端口号、数据库用户名和密码等。 启动应用程序后,BinaryLogClient将会连接到MySQL数据库,并开始监听Binlog事件。当数据库中的数据发生变化时,onEvent方法将会被触发,并执行相应的业务逻辑。 最后,可以通过日志或其他方式来验证整合是否成功。可以观察日志文件来检查是否成功监听到了数据库的更改事件,并执行了相应的业务逻辑。 总结起来,通过在Spring Boot项目中添加依赖、实现事件监听器,并在启动类中设置参数,可以实现Spring Boot与MySQL Binlog Connector的整合。这样就可以监听数据库的更改事件,并执行自定义的业务逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值