说明:这个是使用2.1.5版本

  elastic-job是当当开源的的的定时任务,使用也是很简单的,可以解决数据量的大的时候可以分片执行,多应用节点部署时候不会重复执行。

  是通过zookeeper作为控制中心,进行任务分配。

使用手册:http://elasticjob.io/docs/elastic-job-lite/02-guide/config-manual/

分片原理:https://www.cnblogs.com/haoxinyue/p/6919375.html

一. 安装elastic-job控制台

  下载源码:https://github.com/elasticjob/elastic-job-lite

  (1) 找到elastic-job-lite 下面的elastic-job-lite-console,然后在这个文件下执行mvn打包

mvn clean install -Dmaven.test.skip=true  

  (2)得到elastic-job-lite-console-2.1.5.tar.gz。并上传到linux服务器下,并且解压,

在bin文件夹下执行nohup ./start.sh & (-p 可以指定端口号) ,端口是8899 ,浏览器打开:ip:8899就可以访问控制台了,如下图:

  

   

已经配置过注册中心的界面

   

二, zookeeper安装

参考:

    https://blog.csdn.net/m290345792/article/details/52576890

    https://www.cnblogs.com/wangmingshun/p/7745808.html

三,实现job

  (1)使用maven 引入jar包

<!-- 当当job-->
<dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-core</artifactId><version>2.1.5</version>
</dependency>
<dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-spring</artifactId><version>2.1.5</version>
</dependency>
<!-- 当当job-->

  (2)编写一个测试job

  job功能要 实现SimpleJob这个类,然后重写execute方法,在这个方法中编写job的业务逻辑,例如

public class SimpleJobDemo2 implements SimpleJob {@Overridepublic void execute(ShardingContext shardingContext) {System.out.println(String.format("------Thread ID: %s, 任务总片数: %s, 当前分片项: %s",Thread.currentThread().getId(), shardingContext.getShardingTotalCount(), shardingContext.getShardingItem()));/*** 实际开发中,有了任务总片数和当前分片项,查询选择数据进行执行* */}
}

  例如分片执行的:

public class MyElasticJob implements SimpleJob {@Overridepublic void execute(ShardingContext context) {switch (context.getShardingItem()) {case 0: // do something by sharding item 0break;case 1: // do something by sharding item 1break;case 2: // do something by sharding item 2break;// case n: ...
        }}
}

(3) Spring 配置(更多配置参数请参考 使用手册)  

//数据库jndi配置,执行job 的时候会插入表,并且生成执行记
<bean id="elasticJobLog" class=""org.springframeork.jndi.JndiObjectFactoryBean"><property name="jniName"><value>${db.jndiName}</value></property>
</bean><!--配置作业注册中心 -->
/**
* server-lists : 连接Zookeeper服务器的列表  包括IP地址和端口号 多个地址用逗号分隔 如: host1:2181,host2:2181
* namespace :Zookeeper的命名空间
* base-sleep-time-milliseconds: 等待重试的间隔时间的初始值 单位:毫秒
* max-sleep-time-milliseconds: 等待重试的间隔时间的最大值 单位:毫秒
* max-retries : 最大尝试次数
*
**/
<reg:zookeeper id="regCenter"  server-lists="XXX.XXX.XXX.X:2181"  namespace="hmap-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" /><!-- 配置作业 测试使用-->
/**
* id: 任务的唯一标示
* event-trace-rdb-data-source : job要操作的数据库(可以不设置)
* class:job 所在的位置
* registry-center-ref : 要指定的注册中心* cron : job 触发的cron表达式* sharding-total-count : 作业分片总数* sharding-item-parameters :分片序列号和参数用等号分隔,多个键值对用逗号分隔 分片序列号从0开始,不可大于或等于作业分片总数 如: 0=A,1=B**/<job:simple id="simpleJobDemo2" event-trace-rdb-data-source="elasticJobLog" class="hmap.assist.elasticJob.SimpleJobDemo2" registry-center-ref="regCenter" cron="0/2 * * * * ?" sharding-total-count="2" sharding-item-parameters="0=A,1=B" />

  (4)启动程序,就可以在之前部署的控制台看到job状态

    登录的账号密码在打包的配置文件里,登录后配置注册中心  就可以在页面中看到job了

    

四,job执行说明:

  1. 如果分片数是1  sharding-total-count = "1" zookeeper注册中心会在多台服务器中随机选择一台执行,如果不是1,则会根据分片策略执行。参考:分片原理

   2.  注册中心可以有多台,但是都是以单数的形式(1,3,5),因为zookeeper 是一主多从,主的宕机,会使用选举的形式再次确定哪个是主,哪些是从。

  3. 如果设置了数据库的jndi,并且设置了 event-trace-rdb-data-source 的值,job运行的时候会在数据库的 OB_EXECUTION_LOG和JOB_STATUS_TRACE_LOG两张表中生成执行记录,不设置也不影响job的正常运行 ,例如:

  

五,问题记录

  (1)zookeeper安装启动问题:

  启动会遇到问题,例如找不到jdk,具体原因在安装目录 bin/zookeeper.out文件中查找,找到问题并解决后在启动

  (2) 关闭应用的程序的时候,tomcat 进程还在

  tomcat(sh shutdown.sh) 关闭的时候,项目不能彻底停掉,进程还在:是因为关闭的时候servlet容器发现job还有线程存在,所以不能彻底关闭

  解决办法:增加一个监听,在contextDestroyed 方法中你用elastic-job的shutdown方法

//新建一个类实现ServletContextListener用于关闭elasticJob的线程
@WebListener
public class JobServletContextListener implements ServletContextListener {private static Logger logger = LoggerFactory.getLogger(JobServletContextListener.class);@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {logger.info("Destroying Context...");try {WebApplicationContext context = (WebApplicationContext) servletContextEvent.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);String[] beanNames = context.getBeanDefinitionNames();for(String beanName:beanNames){if(beanName.contains("dangdang")&&beanName.contains("SpringJobScheduler")){logger.info("发现dangdang定时任务beanName: "+beanName);SpringJobScheduler scheduler = (SpringJobScheduler)context.getBean(beanName);scheduler.getSchedulerFacade().shutdownInstance();}}} catch (Exception e) {logger.error("Error Destroying Context", e);}}
}

转载于:https://www.cnblogs.com/sunjiguang/p/9273871.html

elastic-job 的简单使用相关推荐

  1. AWS的CloudFormation和Elastic Beanstalk的简单测试

    文章目录 CloudFormation Elastic Beanstalk 通过EB CLI操作Elastic Beanstalk EB CLI操作的简单测试 EB CLI指令eb init的问题 使 ...

  2. elastic安装,简单配置

    安装elasticsearch: # 下载安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2 ...

  3. 记录阿里云Elastic Search实例使用经验

    记录阿里云Elastic Search实例使用经验 购买服务器 购买完成开始设置并使用 1.打开实例管理页面 2.设置下kibana语言方便操作 3.登录kibana可视化管理平台 进入索引管理查看索 ...

  4. 网络安全基础知识中间件简单介绍

    web服务器产品 apache-httpd tomcat iis lighttp nginx:不是用来web服务器,而是用来做反向代理(tps10w,优化tqs2020w) fastdf:FastDF ...

  5. Elastic Stack - 在一个集中位置发送、存储和分析你的日志

    在生产中运行的应用程序是一头难以驯服的野兽.大多数有经验的开发人员--那些花了足够多的深夜或周六早上试图打破一个令人讨厌的生产错误的人 - 会在编写代码时尝试为他们以后的自己创造尽可能清晰的画面,以便 ...

  6. 介绍27款经典的CSS框架

    < DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> ...

  7. 27 款经典的CSS 框架

    27 款经典的CSS 框架 利用 CSS 框架,可以简化你的工作,提高工作效率.CSS 框架是一系列 CSS 文件的集合体,包含了基本的元素重置,页面排版.网格布局.表单样式.通用规则等代码块.下面给 ...

  8. ElasticSearch实战-入门

    1.概述 今天接着<ElasticSearch实战-日志监控平台>一文来给大家分享后续的学习,在<ElasticSearch实战-日志监控平台>中给大家介绍一个日志监控平台的架 ...

  9. 具有Spring Boot和数据功能的Java头优先弹性搜索

    在本文中,我将为您提供有关如何在Java项目中使用Elastic Search的简单介绍. 由于Spring Boot是开始我们项目的最简单,最快的方法,因此我选择使用它. 此外,我们将大量使用心爱的 ...

  10. html图标框架中文版,常见css框架有哪些?

    CSS框架是预先准备好的软件框架,允许使用层叠样式表语言更容易,更符合标准的进行网页设计.大多数这些框架包含至少一个栅格设计(grid). 常见的css框架: 1.960gs 960 像素的页面宽度似 ...

最新文章

  1. linux shell 按行 逐行 读取文件
  2. 星之卡比镜之迷宫机器人_迷宫武器盘点 | 是兄弟,就拿大宝剑砍我!
  3. 解压bzi2文件出错,分析和处理
  4. 【NLP】探索NLP模型可解释性的7种姿势
  5. 测试软件项目的方法,保证项目测试进度的几个方法
  6. pacemaker+corosync实现集群管理
  7. git 子命令 git tag 常用命令实操教程
  8. 深入理解Yii2.0 (2)事件Event
  9. 跨域请求解决方法(JSONP, CORS)
  10. Jmeter性能测试之命令行执行和生成测试报告
  11. Vm虚拟机Deepin安装教程---kalrry
  12. 成의 時運의 圖像 正易八卦圖
  13. HTML炫彩按钮,PS打造炫彩的开始图标按钮
  14. 图书馆抢座系统(python) 附源码
  15. 怎么计算机械连接的工程量,传力杆套筒工程量怎么算
  16. # TIG监控体系搭建
  17. 如何通过Gitalk评论插件,5分钟为你的博客快速集成评论功能
  18. java——显示当前月的日历
  19. 3-基于51单片机的篮球计分器
  20. C# MVC 向页面传值方式

热门文章

  1. linux dns 攻击,DNSlog攻击技巧 | CN-SEC 中文网
  2. [BUUCTF-pwn]——[BJDCTF 2nd]rci
  3. java 控制台刷屏 dll_Java刷屏问题,下面是我编的代码,请大神帮忙解决下,谢谢...
  4. 风寒感冒和 风热感冒
  5. warning modified in the future
  6. 笔记-VUE滚动加载更多数据
  7. UWP 检测网络状态
  8. python __builtins__ float类 (25)
  9. 视频编解码学习之二:编解码框架
  10. 4.类型设计规范《.NET设计规范》