您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
ElasticJob-Lite作业API——Java API
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
ElasticJob-Lite作业API——Java API
Apache ShardingSphere
2021-01-27
IP归属:未知
24760浏览
## 作业配置 ElasticJob-Lite 采用构建器模式创建作业配置对象。 代码示例如下: ```java JobConfiguration jobConfig = JobConfiguration.newBuilder("myJob", 3).cron("0/5 * * * * ?").shardingItemParameters("0=Beijing,1=Shanghai,2=Guangzhou").build(); ``` ## 作业启动 ElasticJob-Lite 调度器分为定时调度和一次性调度两种类型。 每种调度器启动时均需要注册中心配置、作业对象(或作业类型)以及作业配置这 3 个参数。 ### 定时调度 ```java public class JobDemo { public static void main(String[] args) { // 调度基于 class 类型的作业 new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createJobConfiguration()).schedule(); // 调度基于 type 类型的作业 new ScheduleJobBootstrap(createRegistryCenter(), "MY_TYPE", 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() { // 创建作业配置 ... } } ``` ### 一次性调度 ```java public class JobDemo { public static void main(String[] args) { OneOffJobBootstrap jobBootstrap = new OneOffJobBootstrap(createRegistryCenter(), new MyJob(), createJobConfiguration()); // 可多次调用一次性调度 jobBootstrap.execute(); jobBootstrap.execute(); jobBootstrap.execute(); } private static CoordinatorRegistryCenter createRegistryCenter() { CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "elastic-job-demo")); regCenter.init(); return regCenter; } private static JobConfiguration createJobConfiguration() { // 创建作业配置 ... } } ``` ## 配置作业导出端口 使用 ElasticJob-Lite 过程中可能会碰到一些分布式问题,导致作业运行不稳定。 由于无法在生产环境调试,通过 dump 命令可以把作业内部相关信息导出,方便开发者调试分析; 导出命令的使用请参见[运维指南](/cn/user-manual/elasticjob-lite/operation/dump)。 以下示例用于展示如何通过 SnapshotService 开启用于导出命令的监听端口。 ```java public class JobMain { public static void main(final String[] args) { SnapshotService snapshotService = new SnapshotService(regCenter, 9888).listen(); } private static CoordinatorRegistryCenter createRegistryCenter() { // 创建注册中心 } } ``` ## 配置错误处理策略 使用 ElasticJob-Lite 过程中当作业发生异常后,可采用以下错误处理策略。 | *错误处理策略名称* | *说明* | *是否内置* | *是否默认*| *是否需要额外配置* | | ----------------------- | --------------------------------- | ------- | --------| ------------- | | 记录日志策略 | 记录作业异常日志,但不中断作业执行 | 是 | 是 | | | 抛出异常策略 | 抛出系统异常并中断作业执行 | 是 | | | | 忽略异常策略 | 忽略系统异常且不中断作业执行 | 是 | | | | 邮件通知策略 | 发送邮件消息通知,但不中断作业执行 | | | 是 | | 企业微信通知策略 | 发送企业微信消息通知,但不中断作业执行 | | | 是 | | 钉钉通知策略 | 发送钉钉消息通知,但不中断作业执行 | | | 是 | ### 记录日志策略 ```java public class JobDemo { public static void main(String[] args) { // 定时调度作业 new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createScheduleJobConfiguration()).schedule(); // 一次性调度作业 new OneOffJobBootstrap(createRegistryCenter(), new MyJob(), createOneOffJobConfiguration()).execute(); } private static JobConfiguration createScheduleJobConfiguration() { // 创建定时作业配置, 并且使用记录日志策略 return JobConfiguration.newBuilder("myScheduleJob", 3).cron("0/5 * * * * ?").jobErrorHandlerType("LOG").build(); } private static JobConfiguration createOneOffJobConfiguration() { // 创建一次性作业配置, 并且使用记录日志策略 return JobConfiguration.newBuilder("myOneOffJob", 3).jobErrorHandlerType("LOG").build(); } private static CoordinatorRegistryCenter createRegistryCenter() { // 配置注册中心 ... } } ``` ### 抛出异常策略 ```java public class JobDemo { public static void main(String[] args) { // 定时调度作业 new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createScheduleJobConfiguration()).schedule(); // 一次性调度作业 new OneOffJobBootstrap(createRegistryCenter(), new MyJob(), createOneOffJobConfiguration()).execute(); } private static JobConfiguration createScheduleJobConfiguration() { // 创建定时作业配置, 并且使用抛出异常策略 return JobConfiguration.newBuilder("myScheduleJob", 3).cron("0/5 * * * * ?").jobErrorHandlerType("THROW").build(); } private static JobConfiguration createOneOffJobConfiguration() { // 创建一次性作业配置, 并且使用抛出异常策略 return JobConfiguration.newBuilder("myOneOffJob", 3).jobErrorHandlerType("THROW").build(); } private static CoordinatorRegistryCenter createRegistryCenter() { // 配置注册中心 ... } } ``` ### 忽略异常策略 ```java public class JobDemo { public static void main(String[] args) { // 定时调度作业 new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createScheduleJobConfiguration()).schedule(); // 一次性调度作业 new OneOffJobBootstrap(createRegistryCenter(), new MyJob(), createOneOffJobConfiguration()).execute(); } private static JobConfiguration createScheduleJobConfiguration() { // 创建定时作业配置, 并且使用忽略异常策略 return JobConfiguration.newBuilder("myScheduleJob", 3).cron("0/5 * * * * ?").jobErrorHandlerType("IGNORE").build(); } private static JobConfiguration createOneOffJobConfiguration() { // 创建一次性作业配置, 并且使用忽略异常策略 return JobConfiguration.newBuilder("myOneOffJob", 3).jobErrorHandlerType("IGNORE").build(); } private static CoordinatorRegistryCenter createRegistryCenter() { // 配置注册中心 ... } } ``` ### 邮件通知策略 请参考 [这里](/cn/user-manual/elasticjob-lite/configuration/built-in-strategy/error-handler/#邮件通知策略) 了解更多。 Maven POM: ```xml <dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-error-handler-email</artifactId> <version>${latest.release.version}</version> </dependency> ``` ```java public class JobDemo { public static void main(String[] args) { // 定时调度作业 new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createScheduleJobConfiguration()).schedule(); // 一次性调度作业 new OneOffJobBootstrap(createRegistryCenter(), new MyJob(), createOneOffJobConfiguration()).execute(); } private static JobConfiguration createScheduleJobConfiguration() { // 创建定时作业配置, 并且使用邮件通知策略 JobConfiguration jobConfig = JobConfiguration.newBuilder("myScheduleJob", 3).cron("0/5 * * * * ?").jobErrorHandlerType("EMAIL").build(); setEmailProperties(jobConfig); return jobConfig; } private static JobConfiguration createOneOffJobConfiguration() { // 创建一次性作业配置, 并且使用邮件通知策略 JobConfiguration jobConfig = JobConfiguration.newBuilder("myOneOffJob", 3).jobErrorHandlerType("EMAIL").build(); setEmailProperties(jobConfig); return jobConfig; } private static void setEmailProperties(final JobConfiguration jobConfig) { // 设置邮件的配置 jobConfig.getProps().setProperty(EmailPropertiesConstants.HOST, "host"); jobConfig.getProps().setProperty(EmailPropertiesConstants.PORT, "465"); jobConfig.getProps().setProperty(EmailPropertiesConstants.USERNAME, "username"); jobConfig.getProps().setProperty(EmailPropertiesConstants.PASSWORD, "password"); jobConfig.getProps().setProperty(EmailPropertiesConstants.FROM, "from@xxx.xx"); jobConfig.getProps().setProperty(EmailPropertiesConstants.TO, "to1@xxx.xx,to1@xxx.xx"); } private static CoordinatorRegistryCenter createRegistryCenter() { // 配置注册中心 ... } } ``` ### 企业微信通知策略 请参考 [这里](/cn/user-manual/elasticjob-lite/configuration/built-in-strategy/error-handler/#企业微信通知策略) 了解更多。 Maven POM: ```xml <dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-error-handler-wechat</artifactId> <version>${latest.release.version}</version> </dependency> ``` ```java public class JobDemo { public static void main(String[] args) { // 定时调度作业 new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createScheduleJobConfiguration()).schedule(); // 一次性调度作业 new OneOffJobBootstrap(createRegistryCenter(), new MyJob(), createOneOffJobConfiguration()).execute(); } private static JobConfiguration createScheduleJobConfiguration() { // 创建定时作业配置, 并且使用企业微信通知策略 JobConfiguration jobConfig = JobConfiguration.newBuilder("myScheduleJob", 3).cron("0/5 * * * * ?").jobErrorHandlerType("WECHAT").build(); setWechatProperties(jobConfig); return jobConfig; } private static JobConfiguration createOneOffJobConfiguration() { // 创建一次性作业配置, 并且使用企业微信通知策略 JobConfiguration jobConfig = JobConfiguration.newBuilder("myOneOffJob", 3).jobErrorHandlerType("WECHAT").build(); setWechatProperties(jobConfig); return jobConfig; } private static void setWechatProperties(final JobConfiguration jobConfig) { // 设置企业微信的配置 jobConfig.getProps().setProperty(WechatPropertiesConstants.WEBHOOK, "you_webhook"); } private static CoordinatorRegistryCenter createRegistryCenter() { // 配置注册中心 ... } } ``` ### 钉钉通知策略 请参考 [这里](/cn/user-manual/elasticjob-lite/configuration/built-in-strategy/error-handler/#钉钉通知策略) 了解更多。 Maven POM: ```xml <dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-error-handler-dingtalk</artifactId> <version>${latest.release.version}</version> </dependency> ``` ```java public class JobDemo { public static void main(String[] args) { // 定时调度作业 new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createScheduleJobConfiguration()).schedule(); // 一次性调度作业 new OneOffJobBootstrap(createRegistryCenter(), new MyJob(), createOneOffJobConfiguration()).execute(); } private static JobConfiguration createScheduleJobConfiguration() { // 创建定时作业配置, 并且使用企业微信通知策略 JobConfiguration jobConfig = JobConfiguration.newBuilder("myScheduleJob", 3).cron("0/5 * * * * ?").jobErrorHandlerType("DINGTALK").build(); setDingtalkProperties(jobConfig); return jobConfig; } private static JobConfiguration createOneOffJobConfiguration() { // 创建一次性作业配置, 并且使用钉钉通知策略 JobConfiguration jobConfig = JobConfiguration.newBuilder("myOneOffJob", 3).jobErrorHandlerType("DINGTALK").build(); setDingtalkProperties(jobConfig); return jobConfig; } private static void setDingtalkProperties(final JobConfiguration jobConfig) { // 设置钉钉的配置 jobConfig.getProps().setProperty(DingtalkPropertiesConstants.WEBHOOK, "you_webhook"); jobConfig.getProps().setProperty(DingtalkPropertiesConstants.KEYWORD, "you_keyword"); jobConfig.getProps().setProperty(DingtalkPropertiesConstants.SECRET, "you_secret"); } private static CoordinatorRegistryCenter createRegistryCenter() { // 配置注册中心 ... } } ```
原创文章,需联系作者,授权转载
上一篇:ElasticJob-Lite作业API——作业API
下一篇:ElasticJob-Lite作业API——使用 Spring Boot Starter
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专业服务
扫码关注
京东云开发者公众号