ShardingSphere-ElasticJob踩的坑 截至3.0.1版本
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版本相关推荐
- Spring Boot 从1.0 升级到 2.0 所踩的坑
先给大家晒一下云收藏的几个数据,作为一个 Spring Boot 的开源项目(https://github.com/cloudfavorites/favorites-web)目前在 Github 上面 ...
- MySQL 8.0踩的坑
MySQL 8.0踩的坑 前言 一.MySQL 8.0 删除了password() 二.MySQL 8.0以后修改root密码 三.创建新用户并更改权限 总结 前言 在安装了新的Ubuntu21.04 ...
- MySQL 8.0踩的坑(3)
MySQL 8.0踩的坑(3) Mysql远程连接报错 Mysql远程连接报错 原因:mysql 8.0 默认使用 caching_sha2_password 身份验证机制 之前版本的mysql使用的 ...
- mybatis 查询的时间不对_程序员,Mybatis 你踩过坑吗?
点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...
- 程序员,Mybatis 你踩过坑吗?
大多数开发者应该都使用过Hibernate或者Mybatis的框架,或多或少都踩过一些坑! 如在MyBatis/Ibatis中#和$的区别,#方式能够很大程度防止sql注入,$方式无法防止Sql注入. ...
- map mybatis 的字段返回0_Mybatis 你踩过坑吗?
(给ImportNew加星标,提高Java技能) 作者:似水的流年 yq.aliyun.com/roundtable/49835 大多数开发者应该都使用过Hibernate或者Mybatis的框架,或 ...
- celery开发中踩的坑
celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...
- Hexo+next主题配置踩的坑
Hexo+next主题配置踩的坑 下载安装完next主题后才发现一堆的坑.由于next的版本不同.所以有的配置文件和网上的教程不大一样.自己踩了N多坑,于是打算记录一下.于是自己试了好几天才差不多配置 ...
- 记一次ios内购开发中踩的坑
记一次ios内购开发中踩的坑 前段时间好不容易把APP中的非续期内购上架成功了,过程也是一波三折,各种问题,但最终还是内购审核通过了 通过后我以为就没问题了,但第二天打开xcode运行应用后,准备验证 ...
- 记录对接移动Mas平台发送短信踩的坑
记录对接移动Mas平台发送短信踩的坑 1.首先吐槽一下,移动云Mas平台的接口文档写的真辣鸡 2.第一步,在已经注册完申请过云Mas平台账号之后,登录:移动云Mas平台. 3.登录之后找到 管理 - ...
最新文章
- 不用再找换脸教程了,飞桨PaddleGAN给你一键式体验
- 学界 | 数据并行化对神经网络训练有何影响?谷歌大脑进行了实证研究
- 在asp.net mvc中使用PartialView返回部分HTML段
- 【MM】新建移动类型(Movement Type)
- ScrollView中嵌入Listview,当item高度不一样的时候,item展示不全问题
- 设计模式(十五):解释器模式
- AlarmManager使用注意事项
- 第008讲 div css开山篇
- 图论复习(二)-——哈密顿图及其应用
- 打造平台化保险产业生态圈的四种模式
- 《深入J2SDK》 总结
- 马里兰大学计算机水平,高三学生,二月收到马里兰大学以及普渡大学的计算机科学专业录取,是否值得为北大信科参加高考?...
- 程序员用实力把公司干倒闭了
- WPF3D贴图:用C#搓一个地球
- cgcs2000大地坐标系地图_我国大地坐标系_地图与地图制图
- 《置身事内》读书笔记第一章 地方政府的权利与事务
- f2fs系列文章fsck(五)
- EMNLP 2021信息抽取论文合集
- 如何使用支付宝支付接口
- CPU load和CPU使用率飙高,系统性能问题如何排查?
热门文章
- 【MQTT编程】Last will and Testament(LWT Payload设置)
- 干线公路交叉口右转车辆与非机动车冲突精细化治理实例
- Chapter 6. MATLAB数值计算基础
- 帆软报表日期控件默认值为空
- 分类预测 | MATLAB实现LSSVM(最小二乘支持向量机)分类
- JAVA知识点(尚硅谷宋红康老师的b站授课自我整理)
- AD20 mill与mm转换
- 有道网页翻译chrome插件---我用过的最好的翻译插件
- java 经纬度距离_java根据经纬度计算距离
- 算法高级(45)-阿尔法狗到底有多厉害?