1. 介绍

当前主流的分布式任务调度:

feature quartz elastic-job xxl-job antares opencron
依赖 mysql jdk1.7+, zookeeper 3.4.6+ ,maven3.0.4+ mysql ,jdk1.7+ , maven3.0+ jdk 1.7+ , redis , zookeeper jdk1.7+ , Tomcat8.0+
HA 多节点部署,通过竞争数据库锁来保证只有一个节点执行任务 通过zookeeper的注册与发现,可以动态的添加服务器。 支持水平扩容 集群部署 集群部署
任务分片 支持 支持 支持
文档完善 完善 完善 完善 文档略少 文档略少
管理界面 支持 支持 支持 支持
难易程度 简单 简单 简单 一般 一般
公司 OpenSymphony 当当网 个人 个人 个人
高级功能 弹性扩容,多种作业模式,失效转移,运行状态收集,多线程处理数据,幂等性,容错处理,spring命名空间支持 弹性扩容,分片广播,故障转移,Rolling实时日志,GLUE(支持在线编辑代码,免发布),任务进度监控,任务依赖,数据加密,邮件报警,运行报表,国际化 任务分片, 失效转移,弹性扩容 , 时间规则支持quartz和crontab ,kill任务, 现场执行,查询任务运行状态
使用企业 大众化产品,对分布式调度要求不高的公司大面积使用 36氪,当当网,国美,金柚网,联想,唯品会,亚信,平安,猪八戒 大众点评,运满满,优信二手车,拍拍贷

ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。

ElasticJob 已于 2020 年 5 月 28 日成为 Apache ShardingSphere 的子项目。

注意:使用elastic job 需要提前安装好ZK环境。

以下案例都基于Spring boot工程编写。

2. 静态任务

静态定时任务也就是指将定时执行的周期固定,每次都会按照指定时间执行,elasticjob实现该操作比较简单。我们来实现一次该操作。

操作步骤:

  • 1.执行周期

  • 2.分片

  • 3.指定ZK中的命名空间

  • 引入依赖

    <!-- ElasticJobAutoConfiguration自动配置类作用-->
    <dependency><groupId>com.github.kuhn-he</groupId><artifactId>elastic-job-lite-spring-boot-starter</artifactId><version>2.1.5</version>
    </dependency>
    
  • 配置elasticjob注册中心

    修改bootstrap.yml配置zookeeper服务地址信息以及注册的命名空间名字:

    elaticjob:zookeeper:server-lists: 127.0.0.1:2181namespace: synctask
    
  • 创建作业

    @ElasticSimpleJob(cron = "0/10 * * * * ?",jobName = "synctask",shardingTotalCount = 1
    )
    @Component
    public class SyncStaticTask implements SimpleJob {//执行的流程@Overridepublic void execute(ShardingContext shardingContext) {System.out.println("elatic job执行静态任务。。。");}}
    
  • 测试

    直接启动spring boot项目即可。

3. 动态任务

操作步骤:

  • 注册当前服务-》ZK
  • 创建作业配置
    • jobName
    • shardingTotalCount
    • corn
  • 创建任务
  • 初始化启动任务
  • 首先在yml中添加相关配置信息

    #动态定时任务案例
    dynamiczk: 127.0.0.1:2181
    dynamicnamespace: dynamictask
    
  • 注册服务

    @Configuration
    public class DynamicConfig {@Value("${dynamiczk}")private String dynamiczk;@Value("${dynamicnamespace}")private String dynamicnamespace;/***** 指定当前注册地址信息*/@Beanpublic ZookeeperConfiguration zookeeperConfiguration() {return new ZookeeperConfiguration(dynamiczk, dynamicnamespace);}/***** 向Zookeeper服务注册*/@Bean(initMethod = "init")public ZookeeperRegistryCenter zookeeperRegistryCenter(ZookeeperConfiguration zookeeperConfiguration) {return new ZookeeperRegistryCenter(zookeeperConfiguration);}
    }
    
  • 创建作业调度

    @Component
    public class DynamicTaskCreate {@Autowiredprivate ZookeeperRegistryCenter zookeeperRegistryCenter;/**** 作业创建* @param jobName:作业名字* @param cron:表达式* @param shardingTotalCount:分片数量* @param instance:作业实例* @param parameters:额外参数*/public void create(String jobName, String cron, int shardingTotalCount, SimpleJob instance, String parameters) {//1.配置作业->Builder->构建:LiteJobConfigurationLiteJobConfiguration.Builder builder = LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(jobName,cron,shardingTotalCount).jobParameter(parameters).build(),instance.getClass().getName())).overwrite(true); //overwrite 覆盖之前同名的任务LiteJobConfiguration liteJobConfiguration = builder.build();//2.开启作业new SpringJobScheduler(instance, zookeeperRegistryCenter, liteJobConfiguration).init();}
    }
    
  • 创建定时任务

    public class DynamicJob implements SimpleJob {//执行的作业@Overridepublic void execute(ShardingContext shardingContext) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("elastic job 动态任务:" + simpleDateFormat.format(new Date()));}}
    
  • 测试

    自行创建测试类或者编写接口访问也行

    //创建任务调用,活动结束的时候执行
    //cron表达式就是将我们正常的时间反过来写就OK
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("ss mm HH dd MM ? yyyy");
    String cron = simpleDateFormat.format(seckillActivity.getEndTime());
    System.out.println("cron:" + cron);
    dynamicTaskCreate.create("jobname", cron, 1, new DynamicJob(), "param");
    

Spring boot 集成 Elastic-job 实现定时任务相关推荐

  1. Spring Boot集成Elastic Search

    一.导入maven依赖 本机安装的是6.5.4版本的Elastic Search,故这里导入6.5.4版本的Elastic Search依赖 <properties><java.ve ...

  2. spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例...

    本文介绍spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例 集成swagger--对于做前后端分离的项目,后端只需要提供接口访问,swagger提供了接口 ...

  3. spring boot 集成socketIo 做消息推送

    spring boot 集成socketIo 做消息推送 项目需求 代码展示 客户端代码 服务端代码 项目需求 后台管理系统用户小铃铛,消息推送功能并展示有多少条消息或者小红点 代码展示 客户端代码 ...

  4. spring boot 集成sleuth

    spring boot 集成sleuth 1. 理论 1.1 sleuth是什么 1.2 sleuth有哪些 1.3 链路追踪的一些基本概念 1.4 zipkin的组成 2. zipkin 实例 2. ...

  5. Spring Boot 集成 WebFlux 开发 Reactive Web 应用

    Spring Boot 集成 WebFlux 开发 Reactive Web 应用 <Spring Boot 实战开发>-- 基于 Gradle + Kotlin的企业级应用开发最佳实践 ...

  6. Spring Boot集成Quartz动态实现数据库任务

    1. Quartz简介 1.1. 什么是Quartz Quartz是一个开源的任务调度框架.作用是基于定时.定期的策略来执行任务. 它是OpenSymphony开源组织在Job scheduling领 ...

  7. Spring Boot 集成 XXL-JOB

    xxl-job 设计分两个模块,调度模块,执行模块 调度模块(调度中心):负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码: 执行模块(执行器):负责接收调度请求并执行任务逻辑: Spr ...

  8. Spring Boot集成Swagger导入YApi@无界编程

    接口APi开发现状 现在开发接口都要在类似YApi上写文档,这样方便不同的团队之间协作,同步更新接口,提高效率. 但是如果接口很多,你一个个手工在YApi去录入无疑效率很低. 如果是使用Spring ...

  9. 6.3 Spring Boot集成mongodb开发

    6.3 Spring Boot集成mongodb开发 本章我们通过SpringBoot集成mongodb,Java,Kotlin开发一个极简社区文章博客系统. 0 mongodb简介 Mongo 的主 ...

  10. springboot(十八):使用Spring Boot集成FastDFS

    上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包 ...

最新文章

  1. php如何查找业务bug,一般从php网站找bug怎么开始
  2. linux断电关机后,进度条满后卡在那里
  3. 数据类型长度、原反补码及移位
  4. 【Android 应用开发】 FastJson 使用详解
  5. sqlserver2008数据库自动备份的sql脚本及使用bat命令执行脚本
  6. Linux select/poll机制原理分析
  7. 计算机控制作业及答案,《微机系统与维护》课程作业及答案(二)
  8. 修复GRUB [转]
  9. CImage类 from http://blog.sina.com.cn/s/blog_487547aa0100an6k.html
  10. java 比较2个时间大小写_date - Java 8:计算两个LocalDateTime之间的差异
  11. 设置VSS使支持通过Internet访问
  12. bt种子文件是什么(包括bt文件结构)
  13. 重磅 | 数据挖掘之父韩家炜:文本语料库的数据挖掘(附视频+PPT下载)
  14. 网上一些《算法(第四版)》习题答案链接
  15. Flutter 修改App的名称和图标
  16. 世界第一代电子计算机诞生在,1、世界上第一台电子计算机诞生于
  17. 《Real-Time Rendering 4th Edition》全文翻译 - 第5章 着色基础(上)5.1 ~ 5.2
  18. Python比较文本相似度的7种方法(详细)
  19. 支付宝扫码跳转到跳转页面
  20. PAT(甲级)渡劫(一)-Public Bike Management

热门文章

  1. 基于ssm高校科研管理系统-计算机毕业设计源码+LW文档
  2. Ubuntu系统安装CUDA或NVIDIA驱动后出现循环登录问题的Solution (附:building kernel modules error)
  3. centos下安装python3
  4. Eclipse插件AngularJS Eclipse 1.2.0离线安装包
  5. 计算机组成与系统结构——期末复习
  6. linux dev ram,fdisk -l 显示 16个ram磁盘/dev/ram0... /ram15
  7. Makemusic Finale for Mac(乐谱制作软件)破解教程
  8. 《数据挖掘导论(完整版)》习题答案导航_补档
  9. Skill: win10: 开机启动项管理配置
  10. [Shell]尚硅谷大数据技术之Shell--笔记(3)