一、简介

esjob提供了任务事件追踪功能,通过做数据源配置,监听事件,会在任务执行的时候在指定的数据源创建俩张表,job_execution_log, 和 job_status_trace_log。然后通过配置事件追踪数据源配置,就可以在作业历史中查看作业的执行记录了。

此处使用的是上篇配置的一个simple类型的任务。

二、 整合过程

2.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.elasticjob</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 当当的elastic-job-lite相关 --><dependency><artifactId>elastic-job-common-core</artifactId><groupId>com.dangdang</groupId><version>2.1.5</version></dependency><dependency><artifactId>elastic-job-lite-core</artifactId><groupId>com.dangdang</groupId><version>2.1.5</version></dependency><dependency><artifactId>elastic-job-lite-spring</artifactId><groupId>com.dangdang</groupId><version>2.1.5</version></dependency><!-- 当当的elastic-job-lite相关 --><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version><scope>provided</scope></dependency><!-- lombok --><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- mysql --><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.9</version></dependency><!-- druid --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><!--<dependency><groupId> org.springframework.boot </groupId><artifactId> spring-boot-configuration-processor </artifactId><optional> true </optional></dependency>--></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2.2 application.yml


# 端口
server:port: 8080# spring配置相关
spring:# 应用名称application:name: elastic-job-demo# elasticjob数据源datasource:elasticjob:driverClassName: com.mysql.jdbc.Driverusername: rootpassword: 123456# spring2.0此处为jdbc-urljdbc-url: jdbc:mysql://localhost:3306/elastic-job?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8type: com.alibaba.druid.pool.DruidDataSource# zk注册中心配置相关
reg-center:# 连接Zookeeper服务器的列表IP:端口号,多个地址用逗号分隔server-list: "IP:2181,IP:2182,IP:2183"# Zookeeper的命名空间namespace: zk-elastic-job# 等待重试的间隔时间的初始值 默认1000,单位:毫秒baseSleepTimeMilliseconds: 1000# 等待重试的间隔时间的最大值 默认3000,单位:毫秒maxSleepTimeMilliseconds: 3000# 最大重试次数 默认3maxRetries: 3# 会话超时时间 默认60000,单位:毫秒sessionTimeoutMilliseconds: 60000# 连接超时时间 默认15000,单位:毫秒connectionTimeoutMilliseconds: 15000# 连接Zookeeper的权限令牌 默认不需要#digest:# simpleJobDemo作业配置相关
simpleJobDemo:# cron表达式,用于控制作业触发时间cron: 0 * * * * ?# 作业分片总数sharding-total-count: 3# 分片序列号和参数用等号分隔,多个键值对用逗号分隔.分片序列号从0开始,不可大于或等于作业分片总数sharding-item-parameters: 0=上海,1=北京,2=深圳# 作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业job-parameter: "simpleJobDemo作业参数"# 是否开启任务执行失效转移,开启表示如果作业在一次任务执行中途宕机,允许将该次未完成的任务在另一作业节点上补偿执行, 默认为falsefailover: true# 是否开启错过任务重新执行 默认为truemisfire: true# 作业描述信息job-description: "simpleJobDemo作业描述"

2.3 zk注册中心配置

package com.elasticjob.demo.config.esjob;import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** zk注册中心配置*/
@Configuration
public class ZkRegistryCenterConfig {@Value("${reg-center.server-list}")private String serverList;@Value("${reg-center.namespace}")private String namespace;@Bean(initMethod = "init")public ZookeeperRegistryCenter regCenter() {return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));}}

2.4 ElasticJob数据源

package com.elasticjob.demo.config.esjob;import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;/*** @author qjwyss* @date 2019/5/23* @description ElasticJob数据源*/
@Configuration
public class ElasticJobDatabase {@Bean@ConfigurationProperties(prefix = "spring.datasource.elasticjob")public DataSource elasticjobDataSource() {return DataSourceBuilder.create().build();}@Beanpublic SqlSessionFactory elasticjobSqlSessionFactory(@Qualifier("elasticjobDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}@Beanpublic DataSourceTransactionManager elasticjobTransactionManager(@Qualifier("elasticjobDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Beanpublic SqlSessionTemplate elasticjobSqlSessionTemplate(@Qualifier("elasticjobSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}}

注: 此处注册了一个esjob的数据源。因为有时候任务量会比较大并频繁,生成的监控记录会比较多,可以单独部署。

2.5 JobEventConfig监听配置

package com.elasticjob.demo.config.esjob;import com.dangdang.ddframe.job.event.JobEventConfiguration;
import com.dangdang.ddframe.job.event.rdb.JobEventRdbConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;@Configuration
public class JobEventConfig {@Autowiredprivate DataSource dataSource;@Beanpublic JobEventConfiguration jobEventConfiguration() {return new JobEventRdbConfiguration(dataSource);}
}

2.6 全局作业配置中心

package com.elasticjob.demo.config.esjob;import com.dangdang.ddframe.job.event.JobEventConfiguration;
import com.dangdang.ddframe.job.lite.api.JobScheduler;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import com.elasticjob.demo.taskjob.simplejob.SimpleJobDemo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 全局作业配置中心*/
@Configuration
public class JobConfig {@Autowiredprivate ZookeeperRegistryCenter regCenter;@Autowiredprivate LiteJobConfiguration liteJobConfiguration;@Autowiredprivate JobEventConfiguration jobEventConfiguration;@Autowiredprivate SimpleJobDemo simpleJobDemo;@Bean(initMethod = "init")public JobScheduler simpleJobScheduler() {return new SpringJobScheduler(simpleJobDemo, regCenter, liteJobConfiguration, jobEventConfiguration);}
}

2.7 SimpleJobDemo作业配置

package com.elasticjob.demo.taskjob.simplejob;import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** SimpleJobDemo作业配置*/
@Configuration
public class SimpleJobDemoJobProperties {@Value("${simpleJobDemo.cron}")private String cron;@Value("${simpleJobDemo.sharding-total-count}")private int shardingTotalCount;@Value("${simpleJobDemo.sharding-item-parameters}")private String shardingItemParameters;@Value("${simpleJobDemo.job-description}")private String jobDescription;@Value("${simpleJobDemo.job-parameter}")private String jobParameter;@Autowiredprivate SimpleJobDemo simpleJobDemo;@Beanpublic LiteJobConfiguration liteJobConfiguration() {JobCoreConfiguration.Builder builder =JobCoreConfiguration.newBuilder(simpleJobDemo.getClass().getName(), cron, shardingTotalCount);JobCoreConfiguration jobCoreConfiguration = builder.shardingItemParameters(shardingItemParameters).description(jobDescription).jobParameter(jobParameter).build();SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(jobCoreConfiguration, simpleJobDemo.getClass().getCanonicalName());return LiteJobConfiguration.newBuilder(simpleJobConfiguration).overwrite(true).build();}}

2.8 SimpleJobDemo

package com.elasticjob.demo.taskjob.simplejob;import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;@Component
@Slf4j
public class SimpleJobDemo implements SimpleJob {@Overridepublic void execute(ShardingContext shardingContext) {log.info("shardingContext的信息为:" + shardingContext);switch (shardingContext.getShardingItem()) {case 0:System.out.println("上海分片执行的任务:求和1到3完成,结果为:6");break;case 1:System.out.println("北京分片执行的任务:求和4到7完成,结果为:22");break;case 2:System.out.println("深圳分片执行的任务:求和8到10完成,结果为:27");break;}}
}

2.9 执行

  • 启动项目,可以看到输入如下内容:

    • 2019-05-23 15:19:30.382  INFO 15492 --- [SimpleJobDemo-1] c.e.d.taskjob.simplejob.SimpleJobDemo    : shardingContext的信息为:ShardingContext(jobName=com.elasticjob.demo.taskjob.simplejob.SimpleJobDemo, taskId=com.elasticjob.demo.taskjob.simplejob.SimpleJobDemo@-@0,1,2@-@READY@-@172.16.0.222@-@15492, shardingTotalCount=3, jobParameter=simpleJobDemo作业参数, shardingItem=0, shardingParameter=上海)
      上海分片执行的任务:求和1到3完成,结果为:6
      2019-05-23 15:19:30.383  INFO 15492 --- [SimpleJobDemo-2] c.e.d.taskjob.simplejob.SimpleJobDemo    : shardingContext的信息为:ShardingContext(jobName=com.elasticjob.demo.taskjob.simplejob.SimpleJobDemo, taskId=com.elasticjob.demo.taskjob.simplejob.SimpleJobDemo@-@0,1,2@-@READY@-@172.16.0.222@-@15492, shardingTotalCount=3, jobParameter=simpleJobDemo作业参数, shardingItem=1, shardingParameter=北京)
      北京分片执行的任务:求和4到7完成,结果为:22
      2019-05-23 15:19:30.385  INFO 15492 --- [SimpleJobDemo-3] c.e.d.taskjob.simplejob.SimpleJobDemo    : shardingContext的信息为:ShardingContext(jobName=com.elasticjob.demo.taskjob.simplejob.SimpleJobDemo, taskId=com.elasticjob.demo.taskjob.simplejob.SimpleJobDemo@-@0,1,2@-@READY@-@172.16.0.222@-@15492, shardingTotalCount=3, jobParameter=simpleJobDemo作业参数, shardingItem=2, shardingParameter=深圳)
      深圳分片执行的任务:求和8到10完成,结果为:27
      

三、查看控制台

3.1 数据库

  • 当项目启动并有任务执行的时候,会生成一下俩张表,如下图:

  • job_execution_log表结构详解TODO
    • CREATE TABLE `job_execution_log` (`id` varchar(40) NOT NULL,`job_name` varchar(100) NOT NULL,`task_id` varchar(255) NOT NULL,`hostname` varchar(255) NOT NULL,`ip` varchar(50) NOT NULL,`sharding_item` int(11) NOT NULL,`execution_source` varchar(20) NOT NULL,`failure_cause` varchar(4000) DEFAULT NULL,`is_success` int(11) NOT NULL,`start_time` timestamp NULL DEFAULT NULL,`complete_time` timestamp NULL DEFAULT NULL,PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • job_status_trace_log表结构详解TODO
    • CREATE TABLE `job_status_trace_log` (`id` varchar(40) NOT NULL,`job_name` varchar(100) NOT NULL,`original_task_id` varchar(255) NOT NULL,`task_id` varchar(255) NOT NULL,`slave_id` varchar(50) NOT NULL,`source` varchar(50) NOT NULL,`execution_type` varchar(20) NOT NULL,`sharding_item` varchar(100) NOT NULL,`state` varchar(20) NOT NULL,`message` varchar(4000) DEFAULT NULL,`creation_time` timestamp NULL DEFAULT NULL,PRIMARY KEY (`id`),KEY `TASK_ID_STATE_INDEX` (`task_id`,`state`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.2 控制台添加事件追踪数据源TODO

注: 此处一直失败,TODO

3.3 查看

四、Elastic-job系列

  • Elastic-job系列(一)-------- 搭建Esjob控制台
  • Elastic-job系列(二)-------- simple类型作业
  • Elastic-job系列(三)-------- 控制台作业事件追踪TODO

Elastic-job系列(三)-------- 控制台作业事件追踪TODO相关推荐

  1. springboot整合elasticJob实战(纯代码开发三种任务类型用法)以及分片系统,事件追踪详解...

    一 springboot整合 介绍就不多说了,只有这个框架是当当网开源的,支持分布式调度,分布式系统中非常合适(两个服务同时跑不会重复,并且可灵活配置分开分批处理数据,贼方便)! 这里主要还是用到zo ...

  2. C#基础第三天-作业-集合-冒泡排序-模拟名片

    1.名片:用两种集合(ArrayList/List<>)去输出余下信息. 身份证号码,电话号码,性别,姓名,身高,年龄,体重. 需求:根据 姓名 去查询某一行数据.如果集合中不存在提示(& ...

  3. 数据与广告系列三十二:重排ReRank,广告推荐算法链路上的背叛者,生态系统格局的重塑者...

    作者·黄崇远 『数据虫巢』 全文23138字 题图ssyer.com " 在推荐系统又或者计算广告中,重排ReRank明目张胆的把召回.粗排.精排几个链路逻辑辛苦生成的序给打乱,但却敢号称是 ...

  4. 前端工程师和设计师必读文章推荐【系列三十三】

    <Web 前端开发精华文章推荐>自2011年6月20号发布第一期以来,历经三年半,总共发布了30多期.今天这篇是2015年第2期(总第33期),希望你能在这里发现有用的资料. 梦想天空专注 ...

  5. VSTO之旅系列(三):自定义Excel UI

    VSTO之旅系列(三):自定义Excel UI 原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文 ...

  6. Google Analytics虚拟页面和事件追踪的区别

    今天在蓝鲸的网站分析笔记中,看了Google Analytics虚拟页面和事件追踪这两个功能的介绍文章,两者是事件跟踪(用来记录不产生页面浏览的用户交互行为)的两种方式.但是仔细对比后却有所区别,具体 ...

  7. 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  8. unix系统编码 java_JAVA字符编码系列三:Java应用中的编码问题

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  9. 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面

    原文:学习ASP.NET Core Razor 编程系列三--创建数据表及创建项目基本页面 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 ...

最新文章

  1. java 方法泛型_Java基础学习,什么是泛型概念,使用泛型有哪些好处?
  2. CImage 是基于GDI+的,很老的一篇文章,我很久很久以前看到过的
  3. DCMTK:CT采集类型FG类的测试
  4. PHP学习笔记--面向对象
  5. autosys file watcher 注意事项
  6. 非科班生如何浑水摸鱼在省级大数据竞赛中获奖
  7. linux内存管理:kmap、vmap、ioremap
  8. 支付宝SDK ios快捷支付
  9. mysql 浮点类型有宽度指示器吗_mysql中的浮点类型
  10. linux文件系统与sysfs,Linux设备模型与Sysfs文件系统.doc
  11. WPS2019 所有宏被禁,用启用宏要付费,如何免费使用
  12. 常用应用服务器——Tomcat的常用小技巧
  13. [18调剂]中国科学院深圳先进技术研究院“视频信号处理”课题组招聘
  14. mysql保存微信昵称特殊字符
  15. 视觉检测设计与实践答题卡检测实验报告
  16. 人工智能 | 自动驾驶与人工智能前沿研究报告(人才篇)
  17. “太湖论道 数字制造——世界物联网博览会·工业大数据峰会”成功召开!
  18. 像MyIE一样拥有多窗口(转)
  19. php 中文域名,如何注册中文域名?
  20. python中List类型与numpy.array类型的互相转换

热门文章

  1. 各种media格式说明
  2. 【java毕业设计】基于java+Tomcat +Swing的出租车计价器设计与实现(毕业论文+程序源码)——出租车计价器
  3. 光计算机的定义是什么意思,光计算机的意思_光计算机是什么意思_光计算机的近义词_反义词_读音-沪江在线词典...
  4. 巴比特 | 元宇宙每日必读:厦门出台元宇宙产业发展三年行动计划,美妆品牌如何玩转元宇宙?...
  5. 英伟达 AI 凭空创作人物肖像照:看起来非常真实
  6. 基于51单片机的数字温度计【开源】
  7. golang 读取excel(xlsx文件) 时间格式解析
  8. 【教學】如何使用Ghost 2003備份還原SATA硬碟?
  9. HDU-5813-Elegant Construction-贪心
  10. 数据可视化D3相关记录