文档章节

Elastic-Job作业动态维护

javahao
 javahao
发布于 2017/07/24 17:51
字数 602
阅读 262
收藏 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
博文 11
码字总数 11360
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

Web安全之XSS攻击与防御小结

Web安全之XSS攻防 1. XSS的定义 跨站脚本攻击(Cross Site Scripting),缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从...

前端小攻略
21分钟前
1
0
JavaScript中的继承及实现代码

JS虽然不像是JAVA那种强类型的语言,但也有着与JAVA类型的继承属性,那么JS中的继承是如何实现的呢? 一、构造函数继承 在构造函数中,同样属于两个新创建的函数,也是不相等的 function Fn...

peakedness丶
24分钟前
1
0
记一次面试最常见的10个Redis"刁难"问题

导读:在程序员面试过程中Redis相关的知识是常被问到的话题。作为一名在互联网技术行业打击过成百上千名的资深技术面试官,本文作者总结了面试过程中经常问到的问题。十分值得一读。 Redis在...

小刀爱编程
37分钟前
13
0
TiDB Lab 诞生记 | TiDB Hackathon 优秀项目分享

本文由红凤凰粉凤凰粉红凤凰队的成员主笔,他们的项目 TiDB Lab 在本届 TiDB Hackathon 2018 中获得了二等奖。TiDB Lab 为 TiDB 培训体系增加了一个可以动态观测 TiDB / TiKV / PD 细节的动画...

TiDB
50分钟前
4
0
当区块链遇到零知识证明

本文由云+社区发表 当区块链遇到零知识证明 什么是零知识证明 零知识证明的官方定义是能够在不向验证者任何有用的信息的情况下,使验证者相信某个论断是正确的。这个定义有点抽象,下面笔者举...

腾讯云加社区
59分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部