当前位置:首页 » 《我的小黑屋》 » 正文

JobRunr更轻量级的Java调度平台支持集群自带web管理

13 人参与  2024年10月15日 10:41  分类 : 《我的小黑屋》  评论

点击全文阅读


文章目录

JobRunr 使用介绍SpringBoot 集成使用API介绍web控制面板介绍Job Runr数据库表讲解集群功能

JobRunr 是一个用于在 Java 应用程序中执行后台任务的库。和XXL-JOB类似比XXL-JOB更轻量。
它提供了一种简单而有效的方式来管理和执行长时间运行的任务,例如数据处理、文件生成、发送电子邮件等。
以下是 JobRunr 的一些主要特点:
简单易用:JobRunr 的 API 设计简单直观,易于使用和集成到现有的 Java 应用程序中。
任务调度:JobRunr 支持多种任务调度方式,包括立即执行、延迟执行、定时执行等。
任务持久化:JobRunr 会将任务信息持久化到数据库中,以便在应用程序重启后能够继续执行未完成的任务。
任务监控:JobRunr 提供了一个 Web 界面,用于监控任务的执行情况,包括任务状态、执行时间、执行结果等。
分布式集群执行:JobRunr 支持分布式执行任务,可以将任务分配到多个节点上执行,提高任务执行的效率和可靠性。
官网 https://www.jobrunr.io/
Github https://github.com/jobrunr/jobrunr

JobRunr 使用介绍

SpringBoot 集成使用

IDEA 创建SpringBoot 项目
勾选依赖如下
在这里插入图片描述
项目目录结构
在这里插入图片描述

添加Job Runr 和数据源连接池依赖

SpringBoot 2.x版本

<!--数据源连接池-->        <dependency>            <groupId>com.zaxxer</groupId>            <artifactId>HikariCP</artifactId>            <scope>compile</scope>        </dependency>                <!-- jobrunr 依赖 -->        <dependency>            <groupId>org.jobrunr</groupId>            <artifactId>jobrunr-spring-boot-2-starter</artifactId>            <version>7.2.0</version>        </dependency>

SpringBoot 3.x 版本

<!--数据源连接池-->        <dependency>            <groupId>com.zaxxer</groupId>            <artifactId>HikariCP</artifactId>            <scope>compile</scope>        </dependency>                <!-- jobrunr 依赖 -->        <dependency>            <groupId>org.jobrunr</groupId>            <artifactId>jobrunr-spring-boot-3-starter</artifactId>            <version>7.2.0</version>        </dependency>

我的完整 pom.xml 文件展示

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>3.3.0</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>org.smog</groupId>    <artifactId>jobrunrdemo</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>jobrunrdemo</name>    <description>springboot集成JobRunr使用演示</description>    <properties>        <java.version>17</java.version>    </properties>    <dependencies><!--数据源连接池-->        <dependency>            <groupId>com.zaxxer</groupId>            <artifactId>HikariCP</artifactId>            <scope>compile</scope>        </dependency>                <!-- jobrunr 依赖 -->        <dependency>            <groupId>org.jobrunr</groupId>            <artifactId>jobrunr-spring-boot-3-starter</artifactId>            <version>7.2.0</version>        </dependency>        <!--web容器-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!--Mysql驱动-->        <dependency>            <groupId>com.mysql</groupId>            <artifactId>mysql-connector-j</artifactId>            <scope>runtime</scope>        </dependency>        <!--配置文件支持,IDEA在编辑Spring boot配置文件提供代码提示和自动完成功能。帮助在编译期生成关于应用配置属性的详细元数据,包括属性的描述、默认值等信息。-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-configuration-processor</artifactId>            <optional>true</optional>        </dependency>        <!--自动生成get、set、构成、toString、equals 等函数-->        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <configuration>                    <mainClass>org.smog.jobrunrdemo.JobrunrdemoApplication</mainClass>                    <excludes>                        <exclude>                            <groupId>org.projectlombok</groupId>                            <artifactId>lombok</artifactId>                        </exclude>                    </excludes>                </configuration>            </plugin>        </plugins>    </build></project>

配置数据源
JobRunr 数据存储依赖数据库,需要配置数据源可以是常见关系型数据库、redis、mongodb、elasticsearch。如果你的项目中使用JPA或mybatis 的starter依赖已经自动配置spring.datasource数据源了可以省略这一步。

修改配置文件

spring:  datasource:    url: jdbc:mysql://IP:PORT/testdb?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai    username:     password:    driver-class-name: com.mysql.cj.jdbc.Driver    type: com.zaxxer.hikari.HikariDataSource

创建数据源配置类
因为我这里没有引入mybatis、JPA、JDBC的 starter,不会自动自动创建数据源配置。需要手动创建。

package org.smog.jobrunrdemo.conf;import com.zaxxer.hikari.HikariDataSource;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;@Configurationpublic class DataSourceConf {    @Value("${spring.datasource.url}")    private String url;        @Value("${spring.datasource.username}")    private String username;        @Value("${spring.datasource.password}")    private String password;        @Value("${spring.datasource.driver-class-name}")    private String driverClass;    @Bean    public DataSource dataSource() {        HikariDataSource dataSource = new HikariDataSource();        dataSource.setJdbcUrl(url);        dataSource.setUsername(username);        dataSource.setPassword(password);        dataSource.setDriverClassName(driverClass);        return dataSource;    }}

配置完启动测试一下没有报错就继续下一步

配置JobRunr

SpringBoot配置文件添加配置

org: jobrunr:  background-job-server:   enabled: true  dashboard:    # 开启jobrunr web控制面板    enabled: true    # jobrunr web管理端口    port: 8000    # web管理用户名 不设置则访问web管理不需要认证    username: admin    # web管理密码    password: admin#  database:#    type: sql #使用数据源类型默认sql#    skip-create: false #跳过自动建表 默认false#    database-name: # 指定数据库名称,默认使用主数据源中数据库。如果不想把jobrunr的表与业务数据库放在一起需要配置#    table-prefix: # jobrunr相关表的名字前缀 默认#    datasource: # 如果存在多个数据源,想让jobrunr使用指定数据源。默认使用主数据源 spring.datasource

启动项目访问 8000 端口

出现如下内容集成成功在这里插入图片描述

API介绍

常用API使用示列

创建service类

package org.smog.jobrunrdemo;import org.springframework.stereotype.Service;@Servicepublic class DemoService {    public void backgroundCalculation() {        System.out.println(" 定时计算会员积分");    }}

创建 Controller 类

package org.smog.jobrunrdemo;import org.jobrunr.jobs.JobId;import org.jobrunr.scheduling.BackgroundJob;import org.jobrunr.scheduling.cron.Cron;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;import java.time.ZoneId;import java.util.UUID;@RestControllerpublic class DemoController {    @Autowired    DemoService demoService;    /**     * 立即放入队列等待执行的作业任务,只会执行一次     *     * @param msg     * @return     */    @GetMapping("/oneJob")    public Object oneJob(String msg) {        // 此次执行的任务 Id        UUID uuid = UUID.randomUUID();        // 将作业任务放入队列执行,返回作业id。 后续可根据id溯源        JobId jobId = BackgroundJob.enqueue(uuid, () -> {            System.out.println("后台作业执行中... msg = " + msg);        });        return jobId.toString();    }    /**     * 指定时间执行的作业任务,只会执行一次     *     * @param msg     * @return     */    @GetMapping("/oneJob2")    public Object oneJob2(String msg) {        // 此次执行的任务 Id        UUID uuid = UUID.randomUUID();        // 指定执行时间 这里指定一分钟后执行        LocalDateTime executionTime = LocalDateTime.now().plusMinutes(1);        // 将作业任务放入队列执行,返回作业id。 后续可根据id溯源        JobId jobId = BackgroundJob.schedule(uuid, executionTime, () -> {            System.out.println("后台作业执行中... : msg = " + msg + " 指定的job执行时间: " + executionTime.toString());        });        return jobId.toString();    }    /**     * 按照cron表达式重复作业     *     * @param msg     * @return     */    @GetMapping("/oneJob3")    public Object oneJob3(String msg) {        // jobId 执行任务id, 后续可根据id 停止、删除 作业。        String jobId = msg + System.currentTimeMillis();        // 指定cron 每5分钟执行一次。 Cron 中封装了很多常用表达式,不满足可以自己编写cron表达式        String cron = Cron.every5minutes();        // 指定执行时区        ZoneId asiaShanghaiZone = ZoneId.of("Asia/Shanghai");        //  启动执行重复执行作业job   ,启动后镁5分钟执行一次demoService的backgroundCalculation()方法        return BackgroundJob.scheduleRecurrently(jobId, cron, asiaShanghaiZone, demoService::backgroundCalculation);        // 移除重复作业job        // BackgroundJob.deleteRecurringJob(jobId);    }}

web控制面板介绍

执行器列表页面
这里可以看到我们在线的执行器列表,点击id和name可以查看详情 在这里插入图片描述

重复作业任务Job 列表页面
这里可以看到所有重复作业job,可以查看下一次执行时间、执行时区、cron。在此页面可以手动删 除job和执行job。点击TRIGGER会将job放入执行队列等待执行。
在这里插入图片描述

查看队列中的job
可以查看不同状态的job,点击jobid查看详细还可以取消执行。4.

主页面
主页面能看到运行状态并且以柱状图显示job执行成功数失败数在这里插入图片描述

Job Runr数据库表讲解

jobrunr默认启动指定创建表,创建表如下
在这里插入图片描述

jobrunr_backgroundjobservers
server节点信息表存储在线的执行器集群节点jobrunr_jobs
存储job执行记录信息,包含执行状态、调度时间jobrunr_metadata
存储集群节点元数据信息jobrunr_recurring_jobs
存储重新执行Job信息,包含jobid、创建时间、Job详细信息

集群功能

若一台执行器执行负载过大,可以再启动一个应用实列。Servers下就会多出一个执行器。需要注意第二个实列要连接同一个jobrunr的库。


点击全文阅读


本文链接:http://zhangshiyu.com/post/172002.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1