一、前言

定时任务有很多种,有一些大的框架也有一些简单的实现。

比如常见的:

  • JDK的Timer和TimerTask
  • Quartz异步任务调度框架
  • 分布式定时任务XXL-JOB
  • Spring Task注解@Scheduled

小编也就知道这些,欢迎大佬补充哈!!

今天小编就以现在比较火的分布式定时任务xxl-job,优点比较轻量级,但是从21年到现在没有比较大的更新!

现在最新的好像是2.4.0

二、xxl-job介绍

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用

它是美团大佬:许雪里开发出来的!

本篇以实践教学为主,介绍大家感兴趣可以去官方文档去看看!

xxl-job文档

总体架构图:

大家自行拉去最新代码即可:

项目地址

三、修改配置

1. 运行sql文件



导出到本地数据库:

XXL-JOB调度模块基于自研调度组件并支持集群部署,调度数据库表说明如下:

  • xxl_job_lock:任务调度锁表;
  • xxl_job_group:执行器信息表,维护任务执行器信息;
  • xxl_job_info:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
  • xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
  • xxl_job_log_report:调度日志报表:用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;
  • xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
  • xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
  • xxl_job_user:系统用户表;

2. 修改xxl-job-admin配置

小编修改了一下端口号:

server.port=8087

记得调整成自己的数据库密码:

spring.datasource.password=root

由于sql文件导入的直接是个数据库,不需要我们在调整数据库的名称!

3. 需修改xxl-job-executor-sample-springboot配置

小编这里修改了端口号:

server.port=8086

第11行:修改为admin的端口

xxl.job.admin.addresses=http://127.0.0.1:8087/xxl-job-admin

第22行:小编9999端口被占用,修改了一下端口

xxl.job.executor.port=9998

4. 添加自己的定时任务

@XxlJob("testJobHandler")
public void testJobHandler() throws Exception {
for (int i = 0; i < 5; i++) {
XxlJobHelper.log("这是第" + i + 1 + "条日志!");
System.out.println("这是第" + i + 1 + "次看到我了!");
}
System.out.println("定时任务结束!!");
}

四、运行项目

1. 启动项目

2. 登录

根据上一步的配置,我们直接端口号加服务名字进行访问:

http://localhost:8087/xxl-job-admin/

账号:admin

密码:123456

3. xxl-job的好处

自己写完的定时任务,可以交给这个管理,这样什么时候运行,定时任务的执行规则,都可以在可视化的界面进行管理和操作,更加的人性化!可以动态的修改cron表达式,还有日志执行情况,这是真的香啊!!

4. 查看执行器获取网址

默认已经把springboot整合上来了,如果大家是自己新建的模块可以新增一条,让管理器管理咱们自己项目的定时任务,也就是使用@XxlJob的任务!

5. 新增任务管理

这里比较智能,一些基本的cron表达式都可以帮你写,非常的人性!!

JobHandler:填@XxlJob里面的名字即可,小编这里是:@XxlJob("testJobHandler"),所以是testJobHandler

6. 执行任务

我们这次执行一次,看看控制台是否打印记录,看看我们写的任务是否执行了!!



任务参数随便输入,机器地址为:http://192.168.1.207:9998/,第4步查看的,也就是管理端的地址加端口!!

7. 执行成功

我们看到方法成功被执行了!!

8. 查看日志

五、总结

大家看到我的日志还是有执行失败的,原因是开始端口被占用,没有注意,一直在测试,一直失败!!

大家运行后一定看看控制台有没有报错,如果是java.net.BindException: Address already in use: bind

那就是端口号被占用,换一个就行了!!

也可以看看小编这篇文章,详细解决了这个问题!!

Address already in use: bind【已解决】


有缘人才可以看得到的哦!!!

点击访问!小编自己的网站,里面也是有很多好的文章哦!

springboot整合xxl-job分布式定时任务【图文完整版】的更多相关文章

  1. kubernetes---CentOS7安装kubernetes1.11.2图文完整版

    转载请注明出处:kubernetes-CentOS7安装kubernetes1.11.2图文完整版 架构规划 k8s至少需要一个master和一个node才能组成一个可用集群. 本章我们搭建一个mas ...

  2. 【Spring Cloud & Alibaba全栈开源项目实战】:SpringBoot整合ELK实现分布式登录日志收集和统计

    一. 前言 其实早前就想计划出这篇文章,但是最近主要精力在完善微服务.系统权限设计.微信小程序和管理前端的功能,不过好在有群里小伙伴的一起帮忙反馈问题,基础版的功能已经差不多,也在此谢过,希望今后大家 ...

  3. Redis-基本概念、java操作redis、springboot整合redis,分布式缓存,分布式session管理等

    NoSQL的引言 Redis数据库相关指令 Redis持久化相关机制 SpringBoot操作Redis Redis分布式缓存实现 Resis中主从复制架构和哨兵机制 Redis集群搭建 Redis实 ...

  4. Springboot整合RocketMQ解决分布式事务

    直接上代码: 代码结构如下: 依次贴出相关类: DataSource1Config: package com.example.demo.config;import org.apache.ibatis. ...

  5. docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】

    一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...

  6. springboot整合curator实现分布式锁

    理论篇: Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处 ...

  7. springboot整合zookeeper实现分布式锁

    目录 01 安装并允许zookeeper 02 springboot应用配置CuratorFramework 03 使用zookeeper实现集群只一个应用实例执行定时任务 04 使用zookeepe ...

  8. SpringBoot 整合 Dubbo 进行分布式开发

    自从Dubbo支持SpringBoot后,Dubbo与Spring的整合变得更加的简单了,下面就是完整的步骤: 1. 引入依赖 <dependency> <groupId>co ...

  9. SpringBoot整合quartz框架启动定时任务报错:the given trigger will never fire.

    org.quartz.SchedulerException: Based on configured schedule, the given trigger 'DEFAULT.cron_b1a91e1 ...

随机推荐

  1. 好客租房29-从jsx中抽离事件处理程序

    从jsx中抽离过多js逻辑代码 会显得非常混乱 推荐:将逻辑抽离到单独的方法中 保证jsx结构清晰 //导入react     import React from 'react'           ...

  2. Cocos---简单案例:红气球

    红气球 知识点 场景切换 动画播放,帧事件,Tween 按钮控件 音效管理 案例介绍 开始界面 点击按钮自动进入游戏界面 游戏界面 游戏目的找出红气球,如果点击红气球意味着游戏成功,其余意味着游戏失败 ...

  3. SpringBoot实现基于token的登录验证

    一.SpringBoot实现基于token的登录验证 基于token的登录验证实现原理:客户端通过用户名和密码调用登录接口,当验证数据库中存在该用户后,将用户的信息按照token的生成规则,生成一个字 ...

  4. Property or method "xxx" is not defined on the instance but referenced during render

    是xxx中的data写成date了,因此报错. 这个错误属于粗心

  5. Python数据分析--Numpy常用函数介绍(4)--Numpy中的线性关系和数据修剪压缩

    摘要:总结股票均线计算原理--线性关系,也是以后大数据处理的基础之一,NumPy的 linalg 包是专门用于线性代数计算的.作一个假设,就是一个价格可以根据N个之前的价格利用线性模型计算得出. 前一 ...

  6. 定制ASP.NET 6.0的应用配置

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本文的主题是应用程序配置.要介绍的是如何使用配置.如何自定义配置,以采用不同的方式 ...

  7. Datax源码改造关键步骤记录

    Datax源码改造关键步骤记录: 一.作业配置1.一个job配置:reader 和writer 的column 字段必须是所有表共有的:2.reader多张表,writer一个表时,所有reader的 ...

  8. ExtJS 布局-Column布局(Column layout)

    更新记录: 2022年6月1日 开始. 2022年6月4日 发布. 1.说明 使用列布局,可以将容器拆分为特定大小的列,并将子组件放置在这些列中. 可以设置子组件宽度值为: 百分比(相对父容器宽度) ...

  9. Arduino WeMos D1 开发环境搭建

    更新记录 2022年4月16日:本文迁移自Panda666原博客,原发布时间:2021年9月2日. WeMos D1介绍 WeMos D1开发板全称是WeMos D1 WiFI UNO R3开发板,基 ...

  10. (win环境)使用Electron打造一个桌面应用翻译小工具

    初始化项目 npm init 修改package.json {"name": "trans","version": "1.0.0& ...