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

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 集成使用

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

  2. 添加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>
    
    
  3. 配置数据源
    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;
    
    @Configuration
    public 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;
        }
    }
    
    

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

  4. 配置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
    
    
  5. 启动项目访问 8000 端口

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

API介绍

常用API使用示列

  1. 创建service类

    package org.smog.jobrunrdemo;
    
    import org.springframework.stereotype.Service;
    
    @Service
    public class DemoService {
    
    
        public void backgroundCalculation() {
            System.out.println(" 定时计算会员积分");
        }
    
    }
    
    
  2. 创建 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;
    
    @RestController
    public 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控制面板介绍

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

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

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

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

Job Runr数据库表讲解

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

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

集群功能

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

  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20000_ZuuuuYao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值