前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring Cloud集成任务调度中心

Spring Cloud集成任务调度中心

作者头像
赵哥窟
发布于 2022-06-26 01:12:43
发布于 2022-06-26 01:12:43
91300
代码可运行
举报
文章被收录于专栏:日常技术分享日常技术分享
运行总次数:0
代码可运行

一、使用背景

目前项目中,采用的是微服务框架,由于在微服务中,存在需要定时的任务。但如果定时任务维护在每个微服务下,当微服务部署多个实例的情况下,会出现定事任务多次执行的情况。并且在解决问题的基础上,希望能够实现动态修改任务的定时时间,可以通过页面对定时任务进行控制。

二、xxl-job简单介绍

首先,xxl-job是一个轻量级分布式任务调度平台,内容采用了Quartz定时框架实现,服务之间通信通过RPC的方式实现。

其次,在功能方面:

  1. 支持通过web页面对任务进行增删改查操作
  2. 支持动态修改任务状态、启动、停止等,即时生效。
  3. 支持多种阻塞处理策略,如串行、丢弃后续调度、覆盖之前调度
  4. 支持超时控制、失败重试、邮件报警等处理

三、服务端实现过程

1、xxl-job源码下载:

github地址:https://github.com/xuxueli/xxl-job

其中,xxl-job-core为核心代码块,xxl-job-admin为任务调度中心管理模块,部署的话,部署xxl-job-admin即可。

2、数据库创建:

sql文件为:xxl-job/doc/db/tables_xxl_job.sql,在mysql数据库中执行该sql,能生成新的数据库xxl-job及相关的数据库表xxl_job_*。

目前从源码来看,暂时只支持mysql数据库,如需支持其他数据库,可在源码上进行相关的修改:如mybatis的配置、sql语句等。

3、xxl-job-admin模块配置修改:

修改xxl-job-admin下的配置文件:application.properties

在配置文件中,主要需要修改数据库地址(spring.datasource.url)、用户名(spring.datasource.username)、密码的配置(spring.datasource.password)为实际的部署环境。

端口号(server.port)默认为8080,可修改。

访问地址(server.context-path)默认为xxl-job-admin,可修改。

4、启动xxl-job-admin微服务:

启动成功后,可通过访问http://localhost:8080/xxl-job-admin来对任务调度中心进行访问。

用户名密码默认为:admin/123456

四、客户端(微服务模块)实现过程:

1、引用依赖:

pom.xml中,增加依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.3.1</version>
        </dependency>
2、修改配置文件:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#xxl-job 配置
xxl.job.admin.addresses=http://localhost:9094/xxl-job-admin/
xxl.job.executor.port=9008
xxl.job.executor.appName=project-b-job
xxl.job.executor.logpath=./data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30
xxl.job.accessToken=default_token

其中ip可不填,会自动识别注册。

3、编写Configuration类
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class XxlJobConfig {

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

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

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

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

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

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

    private int logRetentionDays=-1;

    @Bean(initMethod = "start", destroyMethod = "destroy")
    public XxlJobSpringExecutor xxlJobExecutor() {
        System.out.println(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}
4、编写测试类

代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class ScheduleJob {
    @Resource
    OrderMainMapper orderMainMapper;

    @XxlJob("scheduleJobTest")
    public void scheduleJobTest(){
        OrderMain orderMain = new  OrderMain();
        orderMain.setOrderId((int) System.currentTimeMillis());
        orderMain.setUserId(1);
        orderMain.setGoodsName("商品"+new Random().nextInt());
        orderMain.setOrderAmount(new BigDecimal(new Random().nextInt(1000)));
        orderMain.setShopName("店铺"+new Random().nextInt());
        orderMainMapper.insert(orderMain);
    }
}

在上面代码中,Handler的命名为“ scheduleJobTest”,此命名需要是唯一的,后续再服务器中配置会用到。

5、启动客户端(微服务):

启动成功后,会自动在服务器中,增加一个名为【project-b-job】的执行器,用来执行定时任务。

五、服务器端页面中进行配置:

1、新增执行器

访问服务器页面登录成功后,点击执行器管理,如图:

截屏2022-06-23 13.46.17.png

新增一个执行器

截屏2022-06-23 13.47.07.png

2、新增任务

点击【任务管理】页签【新增】按钮,执行器选择 执行器测试,JobHandler编写为【scheduleJobTest】,Cron为定时计划,如图所示:

截屏2022-06-23 13.49.06.png

保存后,可点击【执行】按钮,查看是否调用了客户端的Handler处理。在此不再演示。如可执行,则点击【启动】按钮,会在定时计划内,再次调用Handler处理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手把手教你实现xxl-job分布式任务调度平台搭建
首先我们需要先下载 xxl-job 的源码,下载地址:github:https://github.com/xuxueli/xxl-job。我这里下载使用的是 2.1.2 版本,下载完成后解压,然后使用 IDEA 的Import Project 导入到 IDE 中,注意使用 Maven 方式导入。
用户1516716
2020/09/22
1.7K0
手把手教你实现xxl-job分布式任务调度平台搭建
搭建分布式任务调度平台
3. 分布式任务调度中心会根据相应的路由策略选出其中的一个或者多个,然后再本地执行定时任务
envoke
2020/09/17
1.2K0
搭建分布式任务调度平台
Xxl-job分布式任务调度使用
2022.06.27—重新修正文章错误 这个文章写过一次,搬站时数据丢失了,也就没精力重写了,现在只是粗略写下
蚊子.
2023/08/10
4560
Xxl-job分布式任务调度使用
xxl-job 任务调度 项目的学习(框架使用步骤)
之后写任务,就是这个执行器项目里面有很多的任务,有的任务需要开启,有的需要关闭,那么每一个方法就是一个任务,那么每一个都需要单独的在这个管理平台进行注册
一写代码就开心
2022/06/14
5230
xxl-job 任务调度 项目的学习(框架使用步骤)
三分钟搞定 XXL-JOB 分布式任务调度平台
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/16
1.5K0
三分钟搞定 XXL-JOB 分布式任务调度平台
部署使用XXL-JOB
关于一些特性就不做简单复杂的介绍,可以参考:https://www.xuxueli.com/xxl-job/#1.3%20%E7%89%B9%E6%80%A7
是小张啊喂
2022/08/18
9810
SpringBoot整合XXL-JOB【03】- 执行器的使用
要使用执行器,一方面要在调度中心里配置,另一方面就需要在项目中使用了,所以我们先新建一个SpringBoot的项目,如下:
别惹CC
2025/01/13
4520
SpringBoot整合XXL-JOB【03】-  执行器的使用
五分钟体验分布式调度框架xxl-job
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
方志朋
2022/01/06
7970
五分钟体验分布式调度框架xxl-job
SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
品茗IT
2020/05/28
1.6K0
【极光系列】springBoot集成xxl-job调度器
直接下载可用 https://gitee.com/shawsongyue/aurora.git
夏之以寒
2024/03/04
1830
【极光系列】springBoot集成xxl-job调度器
分布式任务调度平台XXL-JOB
任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务。我们可以思考一下在以下场景中,我们应该怎么实现:
我没有三颗心脏
2019/10/08
2.3K0
分布式任务调度平台XXL-JOB
分布式任务调度平台XXL-JOB,不了解一下?
任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务。我们可以思考一下在以下场景中,我们应该怎么实现:
Bug开发工程师
2019/12/05
1.3K0
xxl-job Vs ElasticJob,谁牛?
1. xxl-job 2. 运行 xxl-job 3. 开发定时任务 3.1 项目创建及配置 3.2 定时任务开发方式 4. 小结 前两天写了一篇文章介绍了一下 ElasticJob,有不少小伙伴强烈建议讲讲 xxl-job,其实 ElasticJob 本来就是一个引子,松哥本来就是想和大家分享 xxl-job 的(手动狗头。 1. xxl-job 松哥也在微信群里和小伙伴们讨论过各自到底用的是 xxl-job 还是 ElasticJob,讨论的结果就是,xxl-job 使用的人更多一些。 不说功能的优劣,
江南一点雨
2022/03/24
1.9K0
SpringBoot+XXL-JOB:高效定时任务管理
在现代应用程序中,定时任务是不可或缺的一部分。Spring Boot 和 XXL-Job 为你提供了一个强大的工具组合,以简化任务调度和管理。
程序员皮皮林
2024/10/10
7630
SpringBoot+XXL-JOB:高效定时任务管理
XXL-Job框架入门介绍
特点: 1.调度中心,任务执行器独立部署,互不影响。 2.调度中心和任务执行器都支持集群化部署,避免出现单点故障。 3.调用中心和执行器之间通过HTTP协议进行通信,因此需要把它们部署在能相互连通的网络环境。
编程随笔
2022/04/29
1.1K0
XXL-Job框架入门介绍
分布式任务调度平台 → XXL-JOB 实战
  老师:谁知道鞭炮用英语怎么说?   甲:老师!老师!我知道,鞭炮的英文是pilipala。   老师:那闪电呢?   乙:kucha kucha   老师:那舞狮呢?   丙:dong dong qiang   老师:你们几个先歇会吧!太费嗓子了!   老师:下一个,谁知道墨家创始人墨子的英文怎么翻译?   丁:black baby   老师:那老子是不是叫old baby?好了最后一题!我们都知道有位大诗人叫陆游,请问他的英文名应该怎么翻译呢?   辛:wifi   同学们:啊哈哈哈哈!!!
青石路
2020/08/05
9130
分布式任务调度平台 → XXL-JOB 实战
三千字带你搞懂XXL-JOB任务调度平台
所以定时任务在平时开发中并不少见,而且对于现在快速消费的时代,每天都需要发送各种推送,消息都需要依赖定时任务去完成,应用非常广泛。
java技术爱好者
2020/10/10
8.5K0
三千字带你搞懂XXL-JOB任务调度平台
让我干一遍也就罢了,居然还一次次的要我给你,当我好欺负吗?
XXL-JOB主要解决的是分布式任务调度问题。传统的调度任务,主要有以下几种解决方法:
灬沙师弟
2023/03/07
4430
让我干一遍也就罢了,居然还一次次的要我给你,当我好欺负吗?
后端技术:Java定时任务的五种创建方式
job任务名:@JobHandler注解值 >> 如:@JobHandler(value=“demoJobHandler”)
小明互联网技术分享社区
2021/09/09
9620
分布式任务调度的解决方案
随着系统规模的发展,定时任务数量日益增多,任务也变得越来越复杂,尤其是在分布式环境下,存在多个业务系统,每个业务系统都有定时任务的需求,如果都在自身系统中调度,一方面增加业务系统的复杂度,另一方面也不方便管理,因此需要有一个任务平台对分散的任务进行统一管理调度,基于目前的情况,任务平台需要支持以下几个方面:
慕容千语
2021/07/20
1.4K0
推荐阅读
相关推荐
手把手教你实现xxl-job分布式任务调度平台搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档