SpringBoot2整合ElasticJob框架过程详解

  

<强>一、ElasticJob

  

<强>简介

  

<强> 1,定时任务

  

在前面的文章中,说过QuartJob这个定时任务,被广泛应用的定时任务标准。但石英核心点在于执行定时任务并不是在于关注的业务模式和场景,缺少高度自定义的功能.Quartz能够基于数据库实现任务的高可用,但是不具备分布式并行调度的功能。

  

→QuartJob定时任务

  

<强> 2,ElasticJob说明基础简介

  

Elastic-Job是一个开源的分布式调度中间件,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成.Elastic-Job-Lite为轻量级无中心化解决方案,使用jar包提供分布式任务的调度和治理。Elastic-Job-Cloud是一个便框架,依托于便额外提供资源治理,应用分发以及进程隔离等服务。

  

功能特点

  
      <李>分布式调度   <李>协调弹性扩容缩容李   <李>失效转移   <李>错过执行   <李>作业重触发作业分片一致性,保证同一分片在分布式环境中仅一个执行实例   
  

补刀:人家官网这样描述的,这里赘述一下,充实一下文章。

  

基础框架结构

  

该图片来自ElasticJob官网。

  

 SpringBoot2整合ElasticJob框架过程详解

  

由图可知如下内容:

  

需要管理员组件支持,作为分布式的调度任务,有良好的监听机制,和控制台,下面的案例也就冲这个图解来。

  

<强> 3分片管理

  

这个概念在ElasticJob中是最具有特点的,实用性极好。

  

分片概念

  

任务的分布式执行,需要将一个任务拆分为多个独立的任务项,然后由分布式的服务器分别执行某一个或几个分片项。

  

场景描述:假设有服务3台,分3片管理,要处理数据表100条,那就可以3 100%,按照余数0,1,2分散到三台服务上执行,看到这里分库分表的基本逻辑涌上心头,这就是为何很多大牛讲说,编程思维很重要。

  

个性化参数

  

个性化参数即shardingItemParameter,可以和分片项匹配对应关系,用于将分片项的数字转换为更加可读的业务代码。

  

场景描述:这里猛一读好像很飘逸,其实就是这个意思,如果分3片,取名(0,1,2)不好看,或者不好标识,可以分别给个别名标识一下,[0=1=B, 2=C]。

  

<强>二、定时任务加载

  

<强> 1,核心依赖包

  

这里使用2.0 +的版本。

        & lt; dependency>   & lt; groupId> com.dangdang   & lt; artifactId> elastic-job-lite-core   & lt; version> 2.1.5   & lt;/dependency>   & lt; dependency>   & lt; groupId> com.dangdang   & lt; artifactId> elastic-job-lite-spring   & lt; version> 2.1.5   & lt;/dependency>      

<强> 2,核心配置文件

  

这里主要配置一下管理员中间件,分片和分片参数。

        动物园管理员:   服务器:127.0.0.1:2181   名称空间:es-job   job-config:   cron: 0/10 * * * * & # 63;   shardCount: 1   shardItem: 0=1=B, C 2=shentuylzc.cn, www.yongxinylzn.cn 3=D      

<强> 3,自定义注解

  

看了官方的案例,没看到好用的注解,这里只能自己编写一个,基于案例的加载过程和核心API作为参考。

  

核心配置类:

  

<代码> com.dangdang.ddframe.job.lite.config.LiteJobConfiguration

  

根据自己想如何使用注解的思路,比如我只想注解定时任务名称和Cron表达式这两个功能,其他参数直接统一配置(这里可能是受QuartJob影响太深,可能根本就是想省事…)

        @Inherited   @Target ({ElementType.TYPE})   @Retention (RetentionPolicy.RUNTIME)   公共@ interface TaskJobSign www.zhuyngyule.cn {      @AliasFor (cron www.feiyuptzc.cn)   字符串值(www.yinmao2zhuce.cn)默认””;      @AliasFor(“价值”)   字符串cron (www.wujiu5zhuce.cn)默认””;      字符串jobName (www.shengyunyule.cn)默认””;      }      

<强> 4,作业案例

  

这里打印一些基本参数,对照配置和注解,一目了然。

        @ component   @TaskJobSign (cron=www.anxing4zc.cn”0/5 * * * * & # 63;“jobName=www.jucaiyle.cn“Hello-Job”)   公共类HelloJob实现SimpleJob {      私有静态最终记录器日志=LoggerFactory.getLogger (HelloJob.class.getName ());      @Override   公共空间执行(ShardingContext ShardingContext) {   LOG.info(“当前线程:“+ Thread.currentThread () .getId ());   LOG.info(“任务分片:“+ shardingContext.getShardingTotalCount ());   LOG.info(“当前分片:“+ shardingContext.getShardingItem ());   LOG.info(“分片参数:”+ shardingContext.getShardingParameter ());   LOG.info(“任务参数:”+ shardingContext.getJobParameter ());   }   }

SpringBoot2整合ElasticJob框架过程详解