文档章节

Elastic-Job作业动态维护

javahao
 javahao
发布于 2017/07/24 17:51
字数 602
阅读 215
收藏 0

#Elastic-Job是什么? 简单的说他是一个可集群,具有容错处理机制的作业调度平台,这里就不做过多阐述,自行搜索

参考资料1参考资料2参考资料3

#Elastic-Job作业动态配置 1、通过查看源码_JobScheduleController_,其实dangdang团队已经考虑到动态配置作业的业务场景,只不过在文档中并没有明确指出(也许是我没有看到相关文档),_JobScheduleController_类里面就封装了作业的控制方法,比如:_shutdown_关闭作业调度,_rescheduleJob_重新调度作业,_pauseJob_暂停作业等等。。。

2、还有一个关键类_JobRegistry_,他是一个单例类,在这个类里面有一个私有实例变量_schedulerMap_,它里面存储着作业名称跟作业控制器的对应关系,这样我们就能通过作业名称从变量中获取到作业控制器,通过作业调度控制器中的方法,配置我们的作业。

#废话不多说,上我们的代码 作者拿springboot做的案例,其他案例类型原理差不多,简单案例代码如下:

package com.dangdang.ddframe.job.example.controller;

import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.event.JobEventConfiguration;
import com.dangdang.ddframe.job.example.job.simple.JavaSimpleJob;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.internal.schedule.JobRegistry;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * usedfor:作业动态配置
 * Created by javahao on 2017/7/24.
 * auth:JavaHao
 */
@RestController
@RequestMapping("/scheduler")
public class SchedulerController {

    @Resource
    private ZookeeperRegistryCenter regCenter;

    @Resource
    private JobEventConfiguration jobEventConfiguration;


    private void add(final SimpleJob simpleJob, final String cron,  final int shardingTotalCount,
                                           final String shardingItemParameters) {
        new SpringJobScheduler(simpleJob, regCenter,
                getLiteJobConfiguration(simpleJob.getClass(), cron, shardingTotalCount, shardingItemParameters),
                jobEventConfiguration).init();
    }

    private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends SimpleJob> jobClass, final String cron, final int shardingTotalCount, final String shardingItemParameters) {
        return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(
                jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).build(), jobClass.getCanonicalName())).overwrite(true).build();
    }

    /**
     * 增加一个作业调度
     * @return 成功标识
     */
    @RequestMapping("/add")
    public boolean add(){
        add(new JavaSimpleJob(),"0/5 * * * * ?",3,"0=Beijing,1=Shanghai,2=Guangzhou");
        return true;
    }
    /**
     * 修改一个作业调度
     * @return 成功标识
     */
    @RequestMapping("/update")
    public boolean update(){
        JobRegistry.getInstance().getJobScheduleController(JavaSimpleJob.class.getName()).rescheduleJob("0/20 * * * * ?");
        return true;
    }
    /**
     * 删除一个作业调度
     * @return 成功标识
     */
    @RequestMapping("/delete")
    public boolean delete(){
        JobRegistry.getInstance().getJobScheduleController(JavaSimpleJob.class.getName()).shutdown();
        return true;
    }
}

这样我们就可以根据自己的业务场景,设计任务调度表结构,在服务启动前加载预制的调度作业,在服务启动过程中,用户可根据自己的需要增加、修改作业,维护作业调度时间周期等等。哈哈,是不是扩展还是比较灵活的?

© 著作权归作者所有

共有 人打赏支持
javahao
粉丝 2
博文 10
码字总数 11029
作品 0
济南
高级程序员
分布式作业 Elastic Job 如何动态调整?

前面分享了两篇分布式作业调度框架 Elastic Job 的介绍及应用实战。 ElasticJob-分布式作业调度神器 分布式作业 Elastic Job 快速上手指南! Elastic Job 提供了简单易用的运维平台,方便用...

Java技术栈
08/24
0
0
分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)

文章摘要:在生产环境中部署Elastic-Job集群后,那么如何来运维监控线上跑着的定时任务呢? 如果在生产环境的大规模服务器集群上部署了集成Elastic-Job的业务工程,而没有相应的运维监控工具...

癫狂侠
05/15
0
0
分布式定时任务调度平台Elastic-Job技术详解

在我们的项目当中,使用定时任务是避免不了的,我们在部署定时任务时,通常只部署一台机器。部署多台机器时,同一个任务会执行多次。比如给用户发送邮件定时任务,每天定时的给用户下发邮件。...

adi851270440
05/29
0
0
SpringBoot整合Elastic-Job,实现动态创建定时任务,任务持久化

SpringBoot使用Elastic-Job-lite,实现动态创建定时任务,任务持久化 Elastic-Job是当当开源的一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。 ...

oppo5630
04/16
0
0
分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(一)

摘要:如何构建具备作业分片和弹性扩缩容的定时任务系统是每个大型业务系统在设计时需要考虑的重要问题? 对于构建一般的业务系统来说,使用Quartz或者Spring Task即可基本满足我们的单体服用...

癫狂侠
05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ajax 提交返回map集合 获取不到值

后台java代码 @RequestMapping("/cameraList") @ResponseBody public Map<String, Object> cameraListForPage(@RequestParam(defaultValue = "1", value = "page") Integer page......

S三少S
6分钟前
0
0
TypeScrip最污的技术课-技术胖TypeScript图文视频教程

近日Node.js之父瑞安达尔(Ryan Dahl)发布新的开源项目 deno,从官方介绍来看,可以认为它是下一代 Node,使用 rust 语言代替 C++ 重新编写跨平台底层内核驱动,上层仍然使用 V8 引擎,最终...

JamesView
8分钟前
5
0
Es学习笔记

1.过滤排重聚合查询 筛选出某一个聚合值的个数统计。相当于mysql的distinct. 关键字:cardinality "aggs": { "2":{ "cardinality": { "field": "field" } ...

Gmupload
11分钟前
0
0
h5语义化标签

语义化HTML:用最恰当的HTML元素标签做恰当的事情。 优点: 提升可访问性; SEO; 结构清晰,利于维护; 通用容器:div——块级通用容器;span——短语内容无语义容器。 <title></title>:简...

莫西摩西
16分钟前
0
0
修改11g rac中 asm diskstring的发现路径

问题 : 如果我 们asm_disking以前是/dev/oracleasm/disks/* ,并且现在已经有磁盘组再用这个磁盘串了,那么,我们无法直接修改这个发现串为 ORCL:*,修改会报错,提示存在的磁盘无法使用新的...

tututu_jiang
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部