ElasticJob

EasticJob原先是属于当当的,在2017 年的时候已经停止了维护,最近在2021年,又重新开启了维护,这篇文章主要是写重启维护后,所带来的一些更改,以及所采的一些坑。(2022年,新爆了一些漏洞,elastic-job平台已经更新到3.0.1版本了)

1.官网地址
https://shardingsphere.apache.org/elasticjob/current/cn/overview/
https://github.com/apache/shardingsphere-elasticjob

2.新版elastic-job平台的部署方法

安装目录是/usr/local/soft/elasticjob(请下载3.0.1版本)
wget https://downloads.apache.org/shardingsphere/elasticjob-ui-3.0.1/apache-shardingsphere-elasticjob-3.0.1-lite-ui-bin.tar.gz;
tar -zxvf apache-shardingsphere-elasticjob-3.0.1-lite-ui-bin.tar.gz;
mv  apache-shardingsphere-elasticjob-3.0.1-lite-ui-bin elasticjob;
cd  /usr/local/soft/elasticjob/elasticjob/conf;
修改application.properties文件的端口和账号上传mysql-connector-java-8.0.28.jar 到/usr/local/soft/elasticjob/elasticjob/lib;
没这一步在3.0.0版本的ui 将无法写入mysql的数据源cd  /usr/local/soft/elasticjob/elasticjob/bin;
./start.sh;
http://192.168.16.147:5073/#/login  测试登录


3.新版Elastic-job 需要 maven 版本3.5.0 以上 ;java8 以上;zookeeper 版本3.6.0 以上(java 代码里接入的zk和平台里的zk都要3.6.0 版本以上)

4. 代码的集成
项目结构图

pom文件

<properties><java.version>1.8</java.version><curator.version>5.1.0</curator.version><elasticjob.version>3.0.1</elasticjob.version>
</properties>
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!--elasticjob-邮件通知--><dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-error-handler-email</artifactId><version>${elasticjob.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-lite-spring-namespace</artifactId><version>${elasticjob.version}</version></dependency><!--事件追踪--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>2.2.0</version></dependency><!--h2 数据库--><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.196</version></dependency><dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-lite-core</artifactId><version>${elasticjob.version}</version><exclusions><exclusion><artifactId>curator-client</artifactId><groupId>org.apache.curator</groupId></exclusion><exclusion><artifactId>curator-framework</artifactId><groupId>org.apache.curator</groupId></exclusion><exclusion><artifactId>curator-recipes</artifactId><groupId>org.apache.curator</groupId></exclusion></exclusions></dependency><dependency><artifactId>curator-client</artifactId><exclusions><exclusion><artifactId>zookeeper</artifactId><groupId>org.apache.zookeeper</groupId></exclusion></exclusions><groupId>org.apache.curator</groupId><version>${curator.version}</version></dependency><dependency><artifactId>zookeeper</artifactId><groupId>org.apache.zookeeper</groupId><version>3.6.0</version></dependency><dependency><artifactId>curator-recipes</artifactId><exclusions><exclusion><artifactId>curator-framework</artifactId><groupId>org.apache.curator</groupId></exclusion></exclusions><groupId>org.apache.curator</groupId><version>${curator.version}</version></dependency><dependency><artifactId>curator-framework</artifactId><groupId>org.apache.curator</groupId><version>${curator.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><exclusions><exclusion><artifactId>log4j-core</artifactId><groupId>org.apache.logging.log4j</groupId></exclusion><exclusion><artifactId>log4j-jul</artifactId><groupId>org.apache.logging.log4j</groupId></exclusion><exclusion><artifactId>log4j-slf4j-impl</artifactId><groupId>org.apache.logging.log4j</groupId></exclusion></exclusions></dependency><dependency><artifactId>log4j-core</artifactId><groupId>org.apache.logging.log4j</groupId></dependency><dependency><artifactId>log4j-jul</artifactId><groupId>org.apache.logging.log4j</groupId></dependency><dependency><artifactId>log4j-api</artifactId><groupId>org.apache.logging.log4j</groupId></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId></dependency>
</dependencies>

注意一点:elasticjob 的版本需要是3.0.0 版本,3.0.1 版本我这边是启动的起来,但是Job平台那显示异常,报错如下

Unable to find property 'timeZone' on class: org.apache.shardingsphere.elasticjob.infra.pojo.JobConfi

Job.xml 文件如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:elasticjob="http://shardingsphere.apache.org/schema/elasticjob"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://shardingsphere.apache.org/schema/elasticjobhttp://shardingsphere.apache.org/schema/elasticjob/elasticjob.xsd"><import resource="base-job.xml"></import><!-- 配置作业 Bean --><bean id="simpleJob6" class="com.top.elasticjob.job.TestJob"></bean><elasticjob:job id="ceshi" job-ref="simpleJob6" registry-center-ref="regCenter" tracing-ref="elasticJobTrace" sharding-total-count="2" cron="0 0/5 * * * ? " sharding-item-parameters="0=Beijing,1=Shanghai,2=Guangzhou" monitor-execution="false" failover="true" description="测试Job是否可用" disabled="false" overwrite="true" job-sharding-strategy-type="AVG_ALLOCATION" job-error-handler-type="EMAIL" job-listener-types="myJobListener"><props><prop key="email.host">smtp.qq.com</prop><prop key="email.port">25</prop><prop key="email.username">22222222@qq.com</prop><prop key="email.password">ufuvhzyogrcxchbf</prop><prop key="email.useSsl">false</prop><prop key="email.subject">错误</prop><prop key="email.from">22222222@qq.com</prop><prop key="email.to">11111111@qq.com</prop>
<!--            <prop key="email.cc">${cc}</prop>-->
<!--            <prop key="email.bcc">${bcc}</prop>--><prop key="email.debug">false</prop></props></elasticjob:job></beans>

base-job.xml的配置文件如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:elasticjob="http://shardingsphere.apache.org/schema/elasticjob"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://shardingsphere.apache.org/schema/elasticjobhttp://shardingsphere.apache.org/schema/elasticjob/elasticjob.xsd"><!--配置作业注册中心 --><elasticjob:zookeeper id="regCenter" server-lists="192.168.16.147:2181" namespace="top"base-sleep-time-milliseconds="3000"max-sleep-time-milliseconds="3000" max-retries="3"  digest="top123"/><bean id="tracingDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"><property name="driverClassName" value="org.h2.Driver" /><property name="url" value="jdbc:h2:tcp://192.168.16.147:19200/~/youdb" /><property name="username" value="h2" /><property name="password" value="h2" /></bean><bean id="tracingDataSourceMysql" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /><property name="url" value="jdbc:mysql://192.168.16.147:3306/test" /><property name="username" value="root" /><property name="password" value="root" /></bean><!--配置事件追踪--><elasticjob:rdb-tracing id="elasticJobTrace" data-source-ref="tracingDataSourceMysql" /></beans>

作业监听器的代码

package com.top.elasticjob.joblistener;import org.apache.shardingsphere.elasticjob.infra.listener.ElasticJobListener;
import org.apache.shardingsphere.elasticjob.infra.listener.ShardingContexts;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;/*** CH常规监听器*/
public class MyJobListener implements ElasticJobListener {@Overridepublic void beforeJobExecuted(ShardingContexts shardingContexts) {System.out.println("任务执行前");}@Overridepublic void afterJobExecuted(ShardingContexts shardingContexts) {System.out.println("任务执行后");}@Overridepublic String getType() {//这个名称需要和配置文件的对应return "myJobListener";}
}

简单Job的代码

package com.top.elasticjob.job;import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;public class TestJob implements SimpleJob {@Overridepublic void execute(ShardingContext shardingContext) {int a0=0;System.out.println(2222222);}
}

说明:
事件追踪:

我这边以mysql 为数据库来做Job的事件追踪的话,数据库的内容录入不进去,java的Job启动和Elastic-job 平台启动都正常,但是数据录入不进去,所以这边采用的是H2 数据库,配置里面 的tracing-ref=“elasticJobTrace” 就是事件追踪的配置核心

<!--事件追踪-->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>2.2.0</version>
</dependency>
<!--h2 数据库-->
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.196</version>
</dependency>
<!-mysql 数据库 和h2 数据库选一个就行->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency>

错误处理策略:

 job-error-handler-type="EMAIL"<props><prop key="email.host">smtp.qq.com</prop><prop key="email.port">25</prop><prop key="email.username">22222222@qq.com</prop><prop key="email.password">ufuvhzyogrcxchbf</prop><prop key="email.useSsl">false</prop><prop key="email.subject">错误</prop><prop key="email.from">22222222@qq.com</prop><prop key="email.to">11111111@qq.com</prop>
<!--            <prop key="email.cc">${cc}</prop>-->
<!--            <prop key="email.bcc">${bcc}</prop>--><prop key="email.debug">false</prop></props>

这些配置都是配置Email 策略的,当Job 运行出错时,任务不中断,发送邮件通知
email.password 的密码 是下图开启SMTP 时所给的授权码

作业监听器

job-listener-types="myJobListener"

这个属性就是配置作业监听器的地方,值需要和写作业监听器类里面的getType 的返回值一样;加载作业监听器是通过SPI的方式加载的,需要在resources 下配置

文件的内容就是所写的作业监听器MyJobListener类的地址
新版的Elastic-job相比于旧版的Job来说,功能都差不多,但是所支持的zk版本更高。本例中需要自行安装zookeeper注册中心和h2数据库或者mysql 数据库,ElasticJob的其余内容和配置 相对简单,查看官网即可,需要源码的可以关注微信公众号(小白逆袭之路),回复 elastic-job。

ShardingSphere-ElasticJob踩的坑 截至3.0.1版本相关推荐

  1. Spring Boot 从1.0 升级到 2.0 所踩的坑

    先给大家晒一下云收藏的几个数据,作为一个 Spring Boot 的开源项目(https://github.com/cloudfavorites/favorites-web)目前在 Github 上面 ...

  2. MySQL 8.0踩的坑

    MySQL 8.0踩的坑 前言 一.MySQL 8.0 删除了password() 二.MySQL 8.0以后修改root密码 三.创建新用户并更改权限 总结 前言 在安装了新的Ubuntu21.04 ...

  3. MySQL 8.0踩的坑(3)

    MySQL 8.0踩的坑(3) Mysql远程连接报错 Mysql远程连接报错 原因:mysql 8.0 默认使用 caching_sha2_password 身份验证机制 之前版本的mysql使用的 ...

  4. mybatis 查询的时间不对_程序员,Mybatis 你踩过坑吗?

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...

  5. 程序员,Mybatis 你踩过坑吗?

    大多数开发者应该都使用过Hibernate或者Mybatis的框架,或多或少都踩过一些坑! 如在MyBatis/Ibatis中#和$的区别,#方式能够很大程度防止sql注入,$方式无法防止Sql注入. ...

  6. map mybatis 的字段返回0_Mybatis 你踩过坑吗?

    (给ImportNew加星标,提高Java技能) 作者:似水的流年 yq.aliyun.com/roundtable/49835 大多数开发者应该都使用过Hibernate或者Mybatis的框架,或 ...

  7. celery开发中踩的坑

    celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...

  8. Hexo+next主题配置踩的坑

    Hexo+next主题配置踩的坑 下载安装完next主题后才发现一堆的坑.由于next的版本不同.所以有的配置文件和网上的教程不大一样.自己踩了N多坑,于是打算记录一下.于是自己试了好几天才差不多配置 ...

  9. 记一次ios内购开发中踩的坑

    记一次ios内购开发中踩的坑 前段时间好不容易把APP中的非续期内购上架成功了,过程也是一波三折,各种问题,但最终还是内购审核通过了 通过后我以为就没问题了,但第二天打开xcode运行应用后,准备验证 ...

  10. 记录对接移动Mas平台发送短信踩的坑

    记录对接移动Mas平台发送短信踩的坑 1.首先吐槽一下,移动云Mas平台的接口文档写的真辣鸡 2.第一步,在已经注册完申请过云Mas平台账号之后,登录:移动云Mas平台. 3.登录之后找到 管理 - ...

最新文章

  1. 不用再找换脸教程了,飞桨PaddleGAN给你一键式体验
  2. 学界 | 数据并行化对神经网络训练有何影响?谷歌大脑进行了实证研究
  3. 在asp.net mvc中使用PartialView返回部分HTML段
  4. 【MM】新建移动类型(Movement Type)
  5. ScrollView中嵌入Listview,当item高度不一样的时候,item展示不全问题
  6. 设计模式(十五):解释器模式
  7. AlarmManager使用注意事项
  8. 第008讲 div css开山篇
  9. 图论复习(二)-——哈密顿图及其应用
  10. 打造平台化保险产业生态圈的四种模式
  11. 《深入J2SDK》 总结
  12. 马里兰大学计算机水平,高三学生,二月收到马里兰大学以及普渡大学的计算机科学专业录取,是否值得为北大信科参加高考?...
  13. 程序员用实力把公司干倒闭了
  14. WPF3D贴图:用C#搓一个地球
  15. cgcs2000大地坐标系地图_我国大地坐标系_地图与地图制图
  16. 《置身事内》读书笔记第一章 地方政府的权利与事务
  17. f2fs系列文章fsck(五)
  18. EMNLP 2021信息抽取论文合集
  19. 如何使用支付宝支付接口
  20. CPU load和CPU使用率飙高,系统性能问题如何排查?

热门文章

  1. 【MQTT编程】Last will and Testament(LWT Payload设置)
  2. 干线公路交叉口右转车辆与非机动车冲突精细化治理实例
  3. Chapter 6. MATLAB数值计算基础
  4. 帆软报表日期控件默认值为空
  5. 分类预测 | MATLAB实现LSSVM(最小二乘支持向量机)分类
  6. JAVA知识点(尚硅谷宋红康老师的b站授课自我整理)
  7. AD20 mill与mm转换
  8. 有道网页翻译chrome插件---我用过的最好的翻译插件
  9. java 经纬度距离_java根据经纬度计算距离
  10. 算法高级(45)-阿尔法狗到底有多厉害?