ElasticJob 是一个分布式调度解决方案,由 2 个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。本文主要介绍 ElasticJob-Lite 的基本使用,文中所使用到的软件版本:Spring Boot 2.4.4、jdk1.8.0_181、elasticjob-lite 3.0.0-RC1。

1、ElasticJob-Lite 简介

ElasticJob-Lite 定位为轻量级无中心化解决方案,使用jar的形式提供分布式任务的协调服务。架构图如下:

详细的介绍请参考官网文档:https://shardingsphere.apache.org/elasticjob/current/cn/overview/

2、使用

2.1、Zookeeper 环境准备

ElasticJob-Lite 使用 Zookeeper作为注册中心,需先安装 Zookeeper;安装方法可参考:https://www.cnblogs.com/wuyongyin/p/12485181.html

2.2、单独使用

2.2.1、引入依赖

<dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-lite-core</artifactId><version>3.0.0-RC1</version>
</dependency>

2.2.2、样例

开发 Job:

package com.abc.demo.solo;import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class MyJob implements SimpleJob {private static Logger logger = LoggerFactory.getLogger(MyJob.class);@Overridepublic void execute(ShardingContext shardingContext) {logger.info(shardingContext.getJobName() + "|" + shardingContext.getShardingItem() + "|" + shardingContext.getShardingParameter());try {Thread.sleep(1000 * 5);} catch (InterruptedException e) {e.printStackTrace();}}
}

运行 Job:

package com.abc.demo.solo;import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.shardingsphere.elasticjob.api.JobConfiguration;
import org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap;
import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
import org.apache.shardingsphere.elasticjob.reg.zookeeper.ZookeeperConfiguration;
import org.apache.shardingsphere.elasticjob.reg.zookeeper.ZookeeperRegistryCenter;
import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;import javax.sql.DataSource;public class MyJobDemo {public static void main(String[] args) {CoordinatorRegistryCenter coordinatorRegistryCenter = createRegistryCenter();DataSource dataSource = getDataSource();TracingConfiguration tracingConfig = new TracingConfiguration<>("RDB", dataSource);new ScheduleJobBootstrap(coordinatorRegistryCenter, new MyJob(), createJobConfiguration("job1", tracingConfig)).schedule();new ScheduleJobBootstrap(coordinatorRegistryCenter, new MyJob(), createJobConfiguration("job2", tracingConfig)).schedule();new ScheduleJobBootstrap(coordinatorRegistryCenter, new MyJob(), createJobConfiguration("job3", tracingConfig)).schedule();}private static CoordinatorRegistryCenter createRegistryCenter() {ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration("10.40.100.69:2181", "my-job");zookeeperConfiguration.setMaxSleepTimeMilliseconds(1000 * 30);zookeeperConfiguration.setConnectionTimeoutMilliseconds(1000 * 30);CoordinatorRegistryCenter coordinatorRegistryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);coordinatorRegistryCenter.init();return coordinatorRegistryCenter;}private static JobConfiguration createJobConfiguration(String jobName, TracingConfiguration tracingConfig) {JobConfiguration jobConfiguration = JobConfiguration.newBuilder(jobName, 2).shardingItemParameters("0=Beijing,1=Shanghai").cron("0/20 * * * * ?").build();//配置事件追踪,即记录任务执行日志jobConfiguration.getExtraConfigurations().add(tracingConfig);return jobConfiguration;}//这里使用 Hikari 连接池,使用 Druid 有时会报错private static DataSource getDataSource() {HikariConfig hikariConfig = new HikariConfig();hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");hikariConfig.setJdbcUrl("jdbc:mysql://10.198.0.10:3306/itest?useUnicode=true&characterEncoding=UTF-8");hikariConfig.setUsername("root");hikariConfig.setPassword("Root_123!");hikariConfig.setMinimumIdle(2);hikariConfig.setMaximumPoolSize(5);hikariConfig.setConnectionTestQuery("select 1");HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);return hikariDataSource;}
}

2.3、Spring Boot 中整合 ElasticJob-Lite

2.3.1、引入依赖

<dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-lite-spring-boot-starter</artifactId><version>3.0.0-RC1</version>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>

2.3.2、application.yml

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://10.198.0.10:3306/itest?useUnicode=true&characterEncoding=UTF-8username: rootpassword: 123456elasticjob:reg-center:server-lists: 10.40.100.69:2181namespace: my-jobmax-sleep-time-milliseconds: 30000connection-timeout-milliseconds: 30000jobs:FirstJob:elasticJobClass: com.abc.demo.job.FirstJobcron: 0/10 * * * * ?shardingTotalCount: 2shardingItemParameters: 0=Beijing,1=ShanghaiScriptJob:elasticJobType: SCRIPTcron: 0/20 * * * * ?shardingTotalCount: 2props:script.command.line: "/home/demo/test.sh"tracing:type: RDB

2.3.3、开发任务

com.abc.demo.job.FirstJob:

package com.abc.demo.job;import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;@Component
public class FirstJob implements SimpleJob {private static Logger logger = LoggerFactory.getLogger(FirstJob.class);@Overridepublic void execute(ShardingContext shardingContext) {logger.info(shardingContext.getJobName() + "|" + shardingContext.getShardingItem() + "|" + shardingContext.getShardingParameter());try {Thread.sleep(1000 * 3);} catch (InterruptedException e) {e.printStackTrace();}}
}

脚本任务(/home/demo/test.sh):

echo 'hello'
echo 'hello2'
echo 'hello3'

2.3.4、启动应用

应用启动后,任务开始运行。

2.4、部署控制台

下载 ElasticJob-Lite-UI 二进制包并解压:https://shardingsphere.apache.org/elasticjob/current/cn/downloads/

在 lib 目录下增加 MySQL、Druid 的驱动包,然后执行 bin/start.sh。

访问地址为:http://10.40.100.69:8088/ (root/root)

来源:Java 定时任务调度(8)--ElasticJob 入门实战(ElasticJob-Lite使用) - 咏吟 - 博客园

Java 定时任务调度(8)--ElasticJob 入门实战(ElasticJob-Lite使用)相关推荐

  1. Java定时任务调度实战(2)Quart框架的简单介绍

    一.前言 在之前的文章<Java定时任务调度(1)TimerTask原理与实战>中已经介绍了一种实现定时任务调度的方法--Java原生提供的 TimerTask,这个工具适用于一些简单的业 ...

  2. Java定时任务调度工具之Timer

    Java定时任务调度工具详解之Timer 导航: Java定时任务调度工具详解之Timer 一. 概述 1.1 课程介绍 1.2 Timer简介 1.3 实战演练 二. timer定时函数的用法 2. ...

  3. Java定时任务调度工具

    tags: 定时任务调度, title: Java定时任务调度工具 为什么要使用定时任务调度工具? 在最近的开发中,想开发一个"个人备忘录"的功能,实际上就是用户在指定某个时间点后 ...

  4. Java定时任务调度工具详解之Timer篇

    Java定时任务调度工具详解之Timer篇 https://segmentfault.com/a/1190000009542398

  5. 【Java定时任务调度工具】Timer

    笔记来源:IMOOC Java Timer 定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. Timer 定义 一种工具,线程用其安排以后在后台线程中执行的任务.可安排 ...

  6. Java定时任务调度详解

    [小宅按]在实际项目开发中,除了Web应用.SOA服务外,还有一类不可缺少的,那就是定时任务调度.定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电 ...

  7. 【慕课笔记】Java定时任务调度工具详解之Timer篇_0理论

    慕课地址 1 简单介绍 1)什么是定时任务调度 2)Timer简介 打开jdk-zh说明文档查看即可 推荐看英文版本的 简单写个demo,感受一下timer的定时调度函数.schedule()(本人实 ...

  8. Java 定时任务调度工具 Quartz(Part 2)

    2019独角兽企业重金招聘Python工程师标准>>> 一.浅谈Job和JobDetail 1.Job接口:实现业务逻辑的任务接口,execute方法中实现具体逻辑(类似与Timer ...

  9. java之jsoup爬虫操作入门实战

    在我目前看来,对于爬虫的理解就是,在浏览器上输入一个url的时候,会发现是生成一些前端的代码界面,从而显示出来的.而爬虫就是获取这些前端界面,再进行对界面的筛选和使用. "获取请求返回的页面 ...

最新文章

  1. as查看SHA1和MD5
  2. Windows10使用技巧
  3. 运行bert模型报错No module named ‘tensorflow.contrib‘
  4. 《Groovy语言规范》-语法(三)
  5. R语言:na.fail和na.omit
  6. python中实现延时回调普通函数示例代码
  7. 快速理解Spark Dataset
  8. rails 放在 apache一个目录下面的配置方法
  9. 关于神经网络权重初始值的设置的研究
  10. android快速点击分析
  11. JSK-384 进制转换【入门】
  12. C语言sql参数化查询,使用LIKE的sql参数化查询
  13. 《21天学通Java(第7版)》—— 2.10 认证练习
  14. matlab数据的获取、预处理、统计、可视化、降维 | 《matlab数学建模方法与实践(第三版)》学习笔记
  15. 动手学深度学习讲义批量下载
  16. BUUCTF刷题-RAR 压缩包暴力破解密码
  17. 从零开始(温故而知新)
  18. 能解决 80% 需求的 10个 CSS动画库
  19. 打印机150nw报错不能打印
  20. C#windows竞赛管理系统

热门文章

  1. 「Apollo」Cyber RT 学习笔记
  2. 关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题
  3. html中两个冒号,css中双冒号和单冒号区别
  4. 实现picturecontrol控件显示图片_陕西曝光机触摸屏实时数据控件
  5. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(更快的RCNN:通过区域提议网络实现实时)
  6. 基于verilog按键消抖设计
  7. linux设备模型,bus,device,driver,实验遇到的问题
  8. java springcloud版b2b2c社交电商spring cloud分布式微服务-docker-feign(四)
  9. bash特性以及shell脚本简介
  10. 纪中模拟赛——接苹果