您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
ElasticJob-Lite使用手册——作用监听器
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
ElasticJob-Lite使用手册——作用监听器
Apache ShardingSphere
2021-01-27
IP归属:未知
25240浏览
ElasticJob-Lite 提供作业监听器,用于在任务执行前和执行后执行监听的方法。 监听器分为每台作业节点均执行的常规监听器和分布式场景中仅单一节点执行的分布式监听器。 本章节将详细介绍他们的使用方式。 在作业依赖(DAG)功能开发完成之后,可能会考虑删除作业监听器功能。 # 使用 Java API ## 常规监听器 ```java public class JobMain { public static void main(String[] args) { new ScheduleJobBootstrap(createRegistryCenter(), createJobConfiguration()).schedule(); } private static CoordinatorRegistryCenter createRegistryCenter() { CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "elastic-job-demo")); regCenter.init(); return regCenter; } private static JobConfiguration createJobConfiguration() { JobConfiguration jobConfiguration = JobConfiguration.newBuilder("test", 2) .jobListenerTypes("simpleListener", "distributeListener").build(); } } ``` ## 分布式监听器 ```java public class JobMain { public static void main(String[] args) { new ScheduleJobBootstrap(createRegistryCenter(), createJobConfiguration()).schedule(); } private static CoordinatorRegistryCenter createRegistryCenter() { CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "elastic-job-demo")); regCenter.init(); return regCenter; } private static JobConfiguration createJobConfiguration() { JobConfiguration jobConfiguration = JobConfiguration.newBuilder("test", 2) .jobListenerTypes("simpleListener", "distributeListener").build(); } } ``` # 监听器开发 ## 常规监听器 若作业处理作业服务器的文件,处理完成后删除文件,可考虑使用每个节点均执行清理任务。 此类型任务实现简单,且无需考虑全局分布式任务是否完成,应尽量使用此类型监听器。 ```java public class MyJobListener implements ElasticJobListener { @Override public void beforeJobExecuted(ShardingContexts shardingContexts) { // do something ... } @Override public void afterJobExecuted(ShardingContexts shardingContexts) { // do something ... } @Override public String getType() { return "simpleJobListener"; } } ``` ## 分布式监听器 若作业处理数据库数据,处理完成后只需一个节点完成数据清理任务即可。 此类型任务处理复杂,需同步分布式环境下作业的状态同步,提供了超时设置来避免作业不同步导致的死锁,应谨慎使用。 ```java public class MyDistributeOnceJobListener extends AbstractDistributeOnceElasticJobListener { public TestDistributeOnceElasticJobListener(long startTimeoutMills, long completeTimeoutMills) { super(startTimeoutMills, completeTimeoutMills); } @Override public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) { // do something ... } @Override public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) { // do something ... } @Override public String getType() { return "distributeOnceJobListener"; } } ``` ## 添加SPI实现 将JobListener实现添加至infra-common下resources/META-INF/services/org.apache.shardingsphere.elasticjob.infra.listener.ElasticJobListener # 使用 Spring 命名空间 ## 监听器配置 ```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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://shardingsphere.apache.org/schema/elasticjob http://shardingsphere.apache.org/schema/elasticjob/elasticjob.xsd "> <!--配置作业注册中心 --> <elasticjob:zookeeper id="regCenter" server-lists="yourhost:2181" namespace="my-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" /> <!-- 配置作业 Bean --> <bean id="myJob" class="xxx.MyJob" /> <elasticjob:job id="${myJob.id}" job-ref="myJob" registry-center-ref="regCenter" sharding-total-count="3" cron="0/1 * * * * ?" job-listener-types="simpleJobListener,distributeOnceJobListener"> </elasticjob:job> </beans> ``` ## 作业启动 将配置 Spring 命名空间的 xml 通过 Spring 启动,作业将自动加载。
原创文章,需联系作者,授权转载
上一篇:ElasticJob-Lite使用手册——事件追踪与操作API
下一篇:ElasticJob-Lite作业API——作业API
Apache ShardingSphere
文章数
96
阅读量
231327
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
数据库技术的发展与变革方兴未艾,NewSQL的出现,只是将各种所需技术组合在一起,而这些技术组合在一起所实现的核心功能,推动着云原生数据库的发展。 NewSQL的三种分类中,新架构和云数据库涉及了太多与数据库相关的底层实现,为了保证本文的范围不至太过发散,我们重点介绍透明化分片数据库中间件的核心功能与实现原理,另外两种类型的NewSQL在核心功能上类似,但实现原理会有所差别。
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
Apache ShardingSphere针对新业务上线、旧业务改造分别提供了相应的全套脱敏解决方案。
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
ShardingSphere对于XA方案,提供了一套SPI解决方案,对Narayana进行了整合,Narayana初始化流程,开始事务流程,获取连接流程,提交事务流程,回滚事务流程。
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
5.x 是 Apache ShardingSphere从分库分表中间件向分布式数据库生态转化的里程碑,从 4.x 版本后期开始打磨的可插拔架构在 5.x 版本已逐渐成型,项目的设计理念和 API 都进行了大幅提升。欢迎大家测试使用!
最新回复
丨
点赞排行
共0条评论
Apache ShardingSphere
文章数
96
阅读量
231327
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号