SpringBoot整合PowerJob实现定时任务调度

 更新时间:2024年03月20日 11:33:53   作者:缘不易  
最近项目需要使用定时任务,而使用了PowerJob做任务调度模块,感觉这个框架真香,今天我们就来深入了解一下新一代的定时任务框架——PowerJob,需要的朋友可以参考下

简介

PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样,基于web页面实现任务调度配置与记录,使用简单,上手快速,其主要功能特性如下:

  • 使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。
  • 定时策略完善:支持 CRON 表达式、固定频率、固定延迟和API四种定时调度策略。
  • 执行模式丰富:支持单机、广播、Map、MapReduce 四种执行模式,其中 Map/MapReduce 处理器能使开发者寥寥数行代码便获得集群分布式计算的能力。
  • 工作流支持:支持在线配置任务依赖关系(DAG),以可视化的方式对任务进行编排,同时还支持上下游任务间的数据传递,以及多种节点类型(判断节点 & 嵌套工作流节点)。
  • 执行器支持广泛:支持 Spring Bean、内置/外置 Java 类,另外可以通过引入官方提供的依赖包,一键集成 Shell、Python、HTTP、SQL 等处理器,应用范围广。
  • 运维便捷:支持在线日志功能,执行器产生的日志可以在前端控制台页面实时显示,降低 debug 成本,极大地提高开发效率。
  • 依赖精简:最小仅依赖关系型数据库(MySQL/PostgreSQL/Oracle/MS SQLServer…)
  • 高可用 & 高性能:调度服务器经过精心设计,一改其他调度框架基于数据库锁的策略,实现了无锁化调度。部署多个调度服务器可以同时实现高可用和性能的提升(支持无限的水平扩展)。
  • 故障转移与恢复:任务执行失败后,可根据配置的重试策略完成重试,只要执行器集群有足够的计算节点,任务就能顺利完成。

定时任务类型

  • 与传统的定时任务框架对比,powerJob支持更多的定时任务类型:
    API: 通过客户端提供的api接口触发,服务端不会主动调度,适用于与业务服务上下连接或只调度一次的业务场景
  • CRON: 通过cron表达式调度,这是多数定时任务框架都支持的
  • 固定频率:每隔多少毫秒执行一次。
  • 固定延迟:延迟多少毫秒执行一次
  • 工作流:配合工作流进行调度,服务端不会主动调度,当工作流节点执行到该任务时运行。

运行

1.然后将powerjob-server/powerjob-server-starter下的application-daily.properties配置文件中的数据库配置改成你服务器的

其中daily,pre,product 表示日常、预生产、生产环境下的配置,与我们常见的dev, test, prod类似,可以根据需要进行调整

在这里插入图片描述

2. 我们先来本地运行启动类PowerJobServerApplication一下试试,启动成功后,访问http://localhost:7700,出现登陆页则说明运行成功

在这里插入图片描述

3、先注册一个执行器,注意这里的应用名称不能顺便取,下文在客户端的配置的app-name要与该名称保持一致

4、然后用该执行器名和密码登录

5、如下,我们就登录成功了

在这里插入图片描述

部署 以 jar 包的形式

运行 maven 打jar 包

在这里插入图片描述

注意,如果这里报错

在这里插入图片描述

那么可以将maven的健康检查关闭,点击如图所示按钮,并且看到test置灰,则表示关闭

在这里插入图片描述

新版idea 可能这样的

在这里插入图片描述

执行mvn package打包项目

在这里插入图片描述

在powerjob-server-starter的target目录下即可看到打包出来的jar,将其上传到指定服务器,通过java -jar指令即可运行

在这里插入图片描述

创建新项目

1、创建一个springboot项目,用于定时任务客户端,引入客户端依赖,如果是spring或其他java项目引入,可参考官网文档:

<dependency>
    <groupId>tech.powerjob</groupId>
    <artifactId>powerjob-worker-spring-boot-starter</artifactId>
    <version>4.3.2</version>
</dependency>

2、修改配置文件

powerjob:
  worker:
    enabled: true
    enable-test-mode: false
    port: 27777
    app-name: admin # 应用名称,需与PowerJob服务 注册的应用保持一致
    server-address: 127.0.0.1:7700
    protocol: http
    max-result-length: 4096
    max-lightweight-task-num: 1024
    max-heavy-task-num: 64

3、启动类上添加注解@EnableScheduling

在这里插入图片描述

4、通过申明BasicProcessor接口,实现process方法来书写一个简单的定时任务示例类,注意要声明为bean

在这里插入图片描述

5、启动客户端项目,运行成功后,可以在服务端首页看到机器实例

在这里插入图片描述

6、服务端任务管理点击新建任务

其中处理器配置是通过书写处理器的全类路径名来声明的,比如我这里是com.example.powerjobdemo.job.SimpleJobServer

在这里插入图片描述

7、创建成功后,可以在列表看到新建的任务

在这里插入图片描述

8、打开客户端控制台,也能看到输出的参数和执行打印,说明任务执行成功

在这里插入图片描述

9、同时我们可以在运行记录中看到执行日志

在这里插入图片描述

至此,针对powerjob的最简单使用就完成了

在这里插入图片描述

定时信息:

主要选择定时任务类型,支持API, CRON,固定频率、固定延迟、工作流、每日固定间隔等几种定时任务类型。

生命周期:

这是比其他任务框架更便捷的功能,指定了任务的生效周期,如果该任务是预定某时间段内执行的,可以通过该参数配置

执行配置:

执行类型支持单机执行、广播执行、Map执行、MapReduce执行

单机执行表示只需要有一个节点执行任务即可的场景

广播执行表示需要全部节点一同执行的场景,比如清除机器日志、各节点数据统计

Map与MapReduce执行都是表示分布式、分批执行,用来拆分计算量、耗时较大的任务,区别在于Map执行是一种简单的数据处理逻辑,特点是将输入数据拆分成多个子块,并交给多个分布式节点同时执行,以提高数据处理效率,适用于简单的数据处理场景

MapReduce执行是一种大数据处理框架,处理逻辑是将复杂的数据处理拆分成Map和Reduce阶段进行处理,通过数据分组计算后合并来提供数据处理效率,更适合复杂的大数据场景

运行时配置:

支持HEALTH_FIRST和RANDOM,即第一个健康节点和随机,用于选择执行处理器节点的策略。

最大实例数用于控制处理器节点数量,线程并发度用于控制并发,运行时间限制

以上就是SpringBoot整合PowerJob实现定时任务调度的详细内容,更多关于SpringBoot PowerJob任务调度的资料请关注脚本之家其它相关文章!

相关文章

  • Java线程安全问题的解决方案

    Java线程安全问题的解决方案

    这篇文章主要介绍了Java线程安全问题的解决方案,文章关于安全的问题的解决方案本文主要分享了三种方法,使用线程安全类,比如 AtomicInteger,使用线程本地变量 ThreadLocal,加锁排队执行,三种方法的使用场景及区别需要的小伙伴可以参考一下
    2022-05-05
  • 超详细讲解Java秒杀项目用户验证模块的实现

    超详细讲解Java秒杀项目用户验证模块的实现

    这是一个主要使用java开发的秒杀系统,项目比较大,所以本篇只实现了用户验证模块,代码非常详尽,感兴趣的朋友快来看看
    2022-03-03
  • spring boot的maven配置依赖详解

    spring boot的maven配置依赖详解

    本篇文章主要介绍了spring boot的maven配置依赖详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java如何生成带网站链接(URL)的二维码

    Java如何生成带网站链接(URL)的二维码

    自从微信扫描出世,二维码扫描逐渐已经成为一种主流的信息传递和交换方式,这篇文章主要给大家介绍了关于Java如何生成带网站链接(URL)的二维码的相关资料,文中通过图文实例代码介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • Java实现微信小程序加密数据解密算法

    Java实现微信小程序加密数据解密算法

    我们开发微信小程序的过程中,我们的服务端有时需要获取微信提供的开放数据。微信会对这些开放数据做签名和加密处理,本文通过实例代码给大家介绍Java实现微信小程序加密数据解密算法,感兴趣的朋友一起看看吧
    2021-11-11
  • java 删除文件夹中的所有内容而不删除文件夹本身的实例

    java 删除文件夹中的所有内容而不删除文件夹本身的实例

    下面小编就为大家带来一篇java 删除文件夹中的所有内容而不删除文件夹本身的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Java实现将方法作为参数传递的方法小结

    Java实现将方法作为参数传递的方法小结

    在Java编程中,将方法作为参数传递是一种强大的技术,可以提高代码的灵活性和可重用性,本文将探讨几种在Java中实现这一目标的方法,需要的朋友可以参考下
    2025-03-03
  • JAVA的Dubbo如何实现各种限流算法

    JAVA的Dubbo如何实现各种限流算法

    Dubbo是一种高性能的Java RPC框架,广泛应用于分布式服务架构中,在Dubbo中实现限流可以帮助服务在高并发场景下保持稳定性和可靠性,常见的限流算法包括固定窗口算法、滑动窗口算法、令牌桶算法和漏桶算法,在Dubbo中集成限流器可以通过实现自定义过滤器来实现
    2025-01-01
  • springboot集成swagger3与knife4j的详细代码

    springboot集成swagger3与knife4j的详细代码

    这篇文章主要介绍了springboot集成swagger3与knife4j,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Java vector的详解及实例

    Java vector的详解及实例

    这篇文章主要介绍了Java vector的详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论