springboot整合xxl-job项目使用(含完整代码)

这篇具有很好参考价值的文章主要介绍了springboot整合xxl-job项目使用(含完整代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:在之前的文章中,我写过springboot集成quartz框架在实际项目中的应用。但是由于quartz框架的一些缺点,而xxl-job能完美克服这些缺点,也是当前市面上使用相对较多的定时任务框架。xxl-job提供了调度中心控制台页面,对所有的定时任务进行统一配置管理。在我之前的文章中写了一篇搭建调度中心的详细过程:https://blog.csdn.net/qq798867485/article/details/131415408。有不会搭建的同学可以先搭建,因为要使用xxljob必须要有调度中心提供服务,下面就详细介绍springboot整合xxl-job项目使用。

一、整合xxl-job
引入xxljob的依赖
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.1</version>
</dependency>
在yml加上xxljob的配置
xxl:
  job:
    admin:
   	# 调度中心服务部署的地址
      addresses: http://localhost:8022/xxl-job-admin 
    # 执行器通讯TOKEN,要和调度中心服务部署配置的accessToken一致,要不然无法连接注册
    accessToken: default_token777
    executor:
      # 执行器AppName
      appname: job-demo
      # 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
      address:
      ip:
      #执行器端口号:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
      port: 8889
      # 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath:
      # 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
      logretentiondays: 30
加上配置类,启动springboot项目时连接调度中心服务

XxlJobConfig.java

package com.example.xxjob.config;

import com.example.xxjob.job.DemoHandler;
import com.xxl.job.core.executor.XxlJobExecutor;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;

@Configuration
@Slf4j
public class XxlJobConfig {

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        log.info(">>>>>>>>>>> start xxl-job config init. >>>>>>>>");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        log.info(">>>>>>>>>>> end xxl-job config init. >>>>>>>>");
        return xxlJobSpringExecutor;
    }
}

启动springboot应用就可以看到能够连接xxl-job调度中心

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

二、编写定时任务(无参)

创建一个service层的类,来模拟实际业务中service层的类的调用

package com.example.xxjob.service;

public interface UserService  {

    void demoJob();
}
package com.example.xxjob.service.impl;

import com.example.xxjob.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service("userService")
@Slf4j
public class UserServiceImpl implements UserService {
    @Override
    public void demoJob() {
        log.info(">>>>>>>>>> 开始处理实际业务逻辑 >>>>>>>>>>>>>>>");
        log.info(">>>>>>>>>> 完成处理实际业务逻辑 >>>>>>>>>>>>>>>");
    }
}

2.1 BEAN模式(类形式)(不推荐)

Bean模式任务,支持基于类的开发方式,每个任务对应一个Java类。

  • 优点:不限制项目环境,兼容性好。即使是无框架项目,如main方法直接启动的项目也可以提供支持,
  • 缺点:
    • 每个任务需要占用一个Java类,造成类的浪费;
    • 不支持自动扫描任务并注入到执行器容器,需要手动注入。

而且还有一个很不好的缺点,就是没法使用@Autowired 或者 @Resource 把bean注入,不然会报空指针异常

2.1.1 新建一个定时任务
package com.example.xxjob.job;

import com.example.xxjob.service.UserService;
import com.example.xxjob.service.impl.UserServiceImpl;
import com.xxl.job.core.handler.IJobHandler;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class DemoHandler extends IJobHandler {

    private final UserService userService = new UserServiceImpl();

    @Override
    public void execute() throws Exception {
        log.info(">>>>>>>>>> BEAN模式(类形式) 开始 >>>>>>>>>>>>>>>");
        userService.demoJob();
        log.info(">>>>>>>>>> BEAN模式(类形式) 成功 >>>>>>>>>>>>>>>");
    }
}

2.1.2 手动注入到执行器容器
XxlJobExecutor.registJobHandler("demoHandler", new DemoHandler());

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

2.1.3 到调度中心执行器管理–新增执行器(也就是你的应用程序)
AppName: 和项目中yml文件配置的appname 的值一致
名称: 测试应用
注册方式:
  -- 自动注册:就无需配置ip和端口
  -- 手动录入:需要把你项目中的ip(域名)和端口录入

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

2.1.3 到调度中心任务管理–新增定时任务(也就是项目中的定时任务)
执行器:定时任务所在的项目,跟上一步执行器的名称一致
调度类型:Core
core表达式:根据需求中定时任务实际情况定
运行模式: BEAN
JobHandler:demoHandler,跟注入到执行器容器名称一致
剩下的一些选项可以默认,也可以根据你实际情况定。

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

2.1.4 执行定时任务和查看日志

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

2.2 BEAN模式(方法形式)(推荐)

2.2.1 新建一个定时任务

package com.example.xxjob.job;

import com.example.xxjob.service.UserService;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class DemoJob {

    @Autowired
    private UserService userService;

    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
        log.info(">>>>>>>>>> BEAN模式(类形式) 开始 >>>>>>>>>>>>>>>");
        userService.demoJob();
        log.info(">>>>>>>>>> BEAN模式(类形式) 成功 >>>>>>>>>>>>>>>");
    }
}

2.2.2 后续步骤和 “2.1 BEAN模式(类形式)”一致,新增定时任务,然后执行即可。

三、定时任务迁移(选)

这个需求的是,公司原先项目中的使用的定时任务框架是quartz,现在要全部改为整合xxl-job来管理所有的定时任务。

首先还是要部署调度中心,配置和新建执行器和之前的步骤是一样的。这里有所不同的是定义一个定时任务,通过传参就可以

知道执行定时任务的逻辑,减少定义多个handler方法。

创建一个定时任务handler
	@XxlJob("doJob")
    @Transactional(rollbackFor = Exception.class)
    public void doJob(){
        String jobParam = XxlJobHelper.getJobParam();
        try {
            if(StrUtil.isNotBlank(jobParam)){
                JSONObject jsonObject = JSONObject.parseObject(jobParam);
                if(Objects.nonNull(jsonObject)){
                    Object bean = SpringUtils.getBean(jsonObject.getString("bean"));
                    Method method = bean.getClass().getMethod(jsonObject.getString("method"));
                    logger.info("调度定时任务执行开始:{}",jobParam);
                    method.invoke(bean);
                    logger.info("调度定时任务执行结束:{}",jobParam);
                }
            }
        }catch (Exception e){
            logger.info("调度定时任务执行失败:{},原因是:{}",jobParam,e.getMessage());
            XxlJobHelper.handleFail();
        }

    }

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

批量新增任务(带参数)
JobHeadler: doJob
任务参数:{"bean":"userService","method":"demoJob"}
bean:为原先定时任务的类,method:为原先定时任务的方法

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

springboot整合xxl,xxl-job,java,springboot,spring boot,java,后端

完整项目的代码:https://github.com/gorylee/learnDemo文章来源地址https://www.toymoban.com/news/detail-676241.html

到了这里,关于springboot整合xxl-job项目使用(含完整代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【2023】XXL-Job 具体通过docker 配置安装容器,再通过springboot执行注册实现完整流程

    在平时的业务场景中,经常有一些场景需要使用定时任务,比如: 时间驱动的场景:某个时间点发送优惠券,发送短信等等。 批量处理数据:批量统计上个月的账单,统计上个月销售数据等等。 固定频率的场景:每隔5分钟需要执行一次。 在Java中,传统的定时任务实现方案

    2024年02月14日
    浏览(37)
  • xxl-job 集成 SpringBoot 使用

      如果您觉得有用的话,记得给 博主点个赞,评论,收藏一键三连啊 ,写作不易啊^ _ ^。   而且听说 点赞的人每天的运气都不会太差 ,实在白嫖的话,那欢迎常来啊!!! xxl-job 集成 SpringBoot 使用 1. xxl-job 安装部署超链接 xxl-job 7.32版本 安装部署 2. 启动xxl-job 3. 集成 Sprin

    2024年02月04日
    浏览(31)
  • Spring Boot 整合 xxl-job

    官方文档:https://www.xuxueli.com/xxl-job/ XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 说明:官方文档很重要,而且非常详细,要慢慢适应看官方文档进行学习! PS:下面搭

    2023年04月13日
    浏览(36)
  • Spring Boot整合 xxl-job

    目录 1. 介绍 2. SpringBoot整合xxl-job 2.1. 配置数据库 2.2. 运行调动中心 2.3. 整合业务服务 2.3.1. 引入maven依赖 2.3.2. 创建业务服务配置类 2.3.3. 创建定时任务 xxl-job是一个分布式定时器任务派遣服务,这个项目主要有以下三部分组成 :  xxl-job-admin: 调动中心,主要是提供任务管理

    2024年02月13日
    浏览(42)
  • xxl-job定时任务配置应用以及添加到自己已有的springboot项目中实现动态API调用

    XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 本篇文章主要是对xuxueli的xxl-job做一个简单的配置,以及将其添加到自己已有的项目中进行api调用。 一、xxl-job安装 1、首先

    2024年02月03日
    浏览(40)
  • 【分布式任务调度平台 XXL-JOB 急速入门】从零开始将 XXL-JOB 接入到自己的项目

                                    💧 分布式任务调度平台 X X L − J O B 急速入门:从零开始将 X X L − J O B 接入到自己的项目 color{#FF1493}{分布式任务调度平台 XXL-JOB 急速入门:从零开始将 XXL-JOB 接入到自己的项目} 分布式任务调度平台 XX L − J OB 急速入门:从零

    2024年02月14日
    浏览(47)
  • SpringBoot 集成 xxl-job 实现定时任务管理

    XXL-Job是一个功能强大的分布式任务调度框架,集成了Spring Boot后能够发挥更大的优势。它提供了分布式任务调度、任务执行报告、任务调度中心、良好的扩展性、分布式集群部署、监控与报警等多种优势。此外,XXL-Job是开源免费的,可以在GitHub上获取源代码和详细文档。详细

    2024年02月09日
    浏览(39)
  • 【极光系列】springBoot集成xxl-job调度器

    直接下载可用 https://gitee.com/shawsongyue/aurora.git 模块:aurora_xxl_job 参考我的另一篇文章:https://blog.csdn.net/weixin_40736233/article/details/135582926?spm=1001.2014.3001.5501 1.下载xxl-job-admin源码 2.创建数据库以及相关表 执行源码ddl路径: /doc/db/tables_xxl_job.sql 3.修改xxl-job-admin相关配置 源码配置路

    2024年02月01日
    浏览(41)
  • XXL-JOB的基本使用

    目录 1、执行器 1.1下边配置执行器 1.2、执行任务 2、 分片广播 作业分片适用哪些场景呢? 2.1、下边测试作业分片: 2.2、在调度中心添加任务 3、作业分片方案 3、1 保证任务不重复执行 下边配置执行器,执行器负责与调度中心通信接收调度中心发起的任务调度请求。 1、首

    2024年02月05日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包