关于SpringBoot整合Elastic-Job一步到胃应用篇

这篇主要是讲整合的应用,至于原理什么的大家可以去官方文档熟悉,直接上手。Elastic-Job呢是一个分布式调度解决方案,当当网开源,主要场景就是做定时任务。
好,开整,就你手头现有的Boot项目或者Cloud项目都可以直接引。
Boot版本:2.1.3,Cloud:Edgware

1. 需要Zookeeper作支撑

在这里插入图片描述
随便选一个版本下载,我这下的是3.5.9
在这里插入图片描述
先进conf目录下找到zoo_sample.cfg文件,直接改名zoo.cfg,里面的内容无需改动。
在这里插入图片描述
再进bin目录,找到zkServer.cmd,双击启动,这个文件就是Windows启动Zookeeper的启动文件。.sh文件是在Linux上启动的。zkCli是客户端,咱暂时用不上。
在这里插入图片描述
好,启动成功,可以看到端口号是2181。至此,Zookeeper就在咱电脑上了。

2. 一个任务小试牛刀

2.1 引入依赖
    <dependency>
      <groupId>com.dangdang</groupId>
      <artifactId>elastic-job-lite-spring</artifactId>
      <version>2.1.5</version>
      <exclusions>
        <exclusion>
          <artifactId>curator-client</artifactId>
          <groupId>org.apache.curator</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-client</artifactId>
      <version>2.11.1</version>
    </dependency>

细看上面的依赖,为啥多此一举呢,看这篇文章详解:
curator-client的依赖问题
另外,只需引入elastic-job-lite-spring就足够。

2.2 走代码
@Component
public class TestElasticJobs implements SimpleJob {

  private static final Logger LOGGER =  LoggerFactory.getLogger(TestElasticJobs.class);

  @Override
  public void execute(ShardingContext shardingContext) {
    LOGGER.info("定时任务开始了~~~~~,{}", LocalDateTime.now());
  }
}

一个小小的测试类。@Component注解一定得有,不然Spring池子里没有,还需要实现SimpleJob,这是Elastic-Job三种类型之一(具体了解请移步官方文档),也是最常用的一种。

@Configuration
public class RegistryCenterConfig {

  @Value("${zooKeeperConfig.serverLists}")
  private String serverLists;
  @Value("${zooKeeperConfig.namespace}")
  private String namespace;

  @Bean(initMethod = "init")
  public CoordinatorRegistryCenter registryCenter(){
    ZookeeperConfiguration configuration = new ZookeeperConfiguration(serverLists,namespace);
    configuration.setSessionTimeoutMilliseconds(100);
    //最大重试次数,默认为3
    configuration.setMaxRetries(4);
    return new ZookeeperRegistryCenter(configuration);
  }
}

Zookeeper注册中心,一个配置类。serverLists和namespace可以在这里写,也可配置到yml文件中。serverLists是连接Zookeeper服务器的列表,还记得咱们启动Zookeeper时的端口吧,就写这儿,本机自己跑直接来localhost:2181就好,或者自己的IP地址。namespace是命名空间,名字随便起就好。ZookeeperConfiguration对象呢可以自己进类中去看,都是中文,好理解的很,可以试着配着玩玩。欧克,注册中心完事儿。

@Configuration
public class ElasticJobConfig {

  @Resource
  private CoordinatorRegistryCenter registryCenter;

  private LiteJobConfiguration jobConfiguration(Class<? extends ElasticJob> clazz,String cron,Integer shardingTotalCount,String shardingItemParameters){

    Builder builder = JobCoreConfiguration.newBuilder(clazz.getSimpleName(), cron, shardingTotalCount);
    if (StringUtils.isNotEmpty(shardingItemParameters)) {
      builder.shardingItemParameters(shardingItemParameters);
    }
    //定义作业核心配置
    JobCoreConfiguration jobCoreConfiguration = builder.build();
    //定义Simple类型配置
    SimpleJobConfiguration simpleConfig = new SimpleJobConfiguration(jobCoreConfiguration, TestElasticJobs.class.getCanonicalName());
    //定义Lite作业根配置
    return LiteJobConfiguration.newBuilder(simpleConfig).overwrite(true).build();
  }

  @Bean(initMethod = "init")
  public SpringJobScheduler jobScheduler(TestElasticJobs elasticJob){
    //要保证Task类名与之前不同
    return new SpringJobScheduler(elasticJob,registryCenter,jobConfiguration(elasticJob.getClass(),"0/5 * * * * ?",1,null));
  }

}

作业调度配置类。执行定时任务的地方,下面的Bean类就要引用之前的那个测试任务,主要就需要一个cron表达式,就是什么时候执行,我写的这个 “0/5 * * * * ?” 就是说每5秒执行一次,其他的时间可以度娘cron,方便的很。上面的方法则是SimpleJob的配置,这里不做叙述。
欧克,现在我们启动服务康康
在这里插入图片描述
成功啦成功啦

3. 举一反三来一波

上面呢只是一个任务,咱们多搞几个,咋多搞呢,一、多写一个测试任务类。二、作业调度中多加一个Bean,挺简单哈。
在这里插入图片描述
在这里插入图片描述
瞅瞅,是不是搞定了
把类名对应上,两个Bean无大差别,只是jobConfiguration方法的参数需要自己重新设定,主要也就是cron式子啦。再次启动服务,两个任务就都执行起来了。
欧克,整合到这就差不多了,我也就是写个小Demo,如果有任何问题欢迎讨论~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值