Spring boot 集成 Elastic-job 实现定时任务
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 实现定时任务相关推荐
- Spring Boot集成Elastic Search
一.导入maven依赖 本机安装的是6.5.4版本的Elastic Search,故这里导入6.5.4版本的Elastic Search依赖 <properties><java.ve ...
- spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例...
本文介绍spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例 集成swagger--对于做前后端分离的项目,后端只需要提供接口访问,swagger提供了接口 ...
- spring boot 集成socketIo 做消息推送
spring boot 集成socketIo 做消息推送 项目需求 代码展示 客户端代码 服务端代码 项目需求 后台管理系统用户小铃铛,消息推送功能并展示有多少条消息或者小红点 代码展示 客户端代码 ...
- spring boot 集成sleuth
spring boot 集成sleuth 1. 理论 1.1 sleuth是什么 1.2 sleuth有哪些 1.3 链路追踪的一些基本概念 1.4 zipkin的组成 2. zipkin 实例 2. ...
- Spring Boot 集成 WebFlux 开发 Reactive Web 应用
Spring Boot 集成 WebFlux 开发 Reactive Web 应用 <Spring Boot 实战开发>-- 基于 Gradle + Kotlin的企业级应用开发最佳实践 ...
- Spring Boot集成Quartz动态实现数据库任务
1. Quartz简介 1.1. 什么是Quartz Quartz是一个开源的任务调度框架.作用是基于定时.定期的策略来执行任务. 它是OpenSymphony开源组织在Job scheduling领 ...
- Spring Boot 集成 XXL-JOB
xxl-job 设计分两个模块,调度模块,执行模块 调度模块(调度中心):负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码: 执行模块(执行器):负责接收调度请求并执行任务逻辑: Spr ...
- Spring Boot集成Swagger导入YApi@无界编程
接口APi开发现状 现在开发接口都要在类似YApi上写文档,这样方便不同的团队之间协作,同步更新接口,提高效率. 但是如果接口很多,你一个个手工在YApi去录入无疑效率很低. 如果是使用Spring ...
- 6.3 Spring Boot集成mongodb开发
6.3 Spring Boot集成mongodb开发 本章我们通过SpringBoot集成mongodb,Java,Kotlin开发一个极简社区文章博客系统. 0 mongodb简介 Mongo 的主 ...
- springboot(十八):使用Spring Boot集成FastDFS
上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包 ...
最新文章
- php如何查找业务bug,一般从php网站找bug怎么开始
- linux断电关机后,进度条满后卡在那里
- 数据类型长度、原反补码及移位
- 【Android 应用开发】 FastJson 使用详解
- sqlserver2008数据库自动备份的sql脚本及使用bat命令执行脚本
- Linux select/poll机制原理分析
- 计算机控制作业及答案,《微机系统与维护》课程作业及答案(二)
- 修复GRUB [转]
- CImage类 from http://blog.sina.com.cn/s/blog_487547aa0100an6k.html
- java 比较2个时间大小写_date - Java 8:计算两个LocalDateTime之间的差异
- 设置VSS使支持通过Internet访问
- bt种子文件是什么(包括bt文件结构)
- 重磅 | 数据挖掘之父韩家炜:文本语料库的数据挖掘(附视频+PPT下载)
- 网上一些《算法(第四版)》习题答案链接
- Flutter 修改App的名称和图标
- 世界第一代电子计算机诞生在,1、世界上第一台电子计算机诞生于
- 《Real-Time Rendering 4th Edition》全文翻译 - 第5章 着色基础(上)5.1 ~ 5.2
- Python比较文本相似度的7种方法(详细)
- 支付宝扫码跳转到跳转页面
- PAT(甲级)渡劫(一)-Public Bike Management
热门文章
- 基于ssm高校科研管理系统-计算机毕业设计源码+LW文档
- Ubuntu系统安装CUDA或NVIDIA驱动后出现循环登录问题的Solution (附:building kernel modules error)
- centos下安装python3
- Eclipse插件AngularJS Eclipse 1.2.0离线安装包
- 计算机组成与系统结构——期末复习
- linux dev ram,fdisk -l 显示 16个ram磁盘/dev/ram0... /ram15
- Makemusic Finale for Mac(乐谱制作软件)破解教程
- 《数据挖掘导论(完整版)》习题答案导航_补档
- Skill: win10: 开机启动项管理配置
- [Shell]尚硅谷大数据技术之Shell--笔记(3)