XXL-JOB的配置与使用

目录

一、什么是XXL-JOB?

二、Java主流三大定时器技术选型

三、XXL-JOB的一些特性:

四、XXL-JOB与项目结合

五、执行器(任务调度中心):

一、什么是XXL-JOB?

  XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

二、Java主流三大定时器技术选型

  选型时原则:少服务器 后期维护方便 增加任务省事而且快捷 不涉及启停服务

1、Quartz

    优点:支持集群部署

    缺点:没有自带的管理界面;调度逻辑和执行任务耦合在一起;维护需要重启服务

    总结:针对目前项目情况,利弊相同

2、xxl-job

    优点:支持集群部署;提供运维界面维护成本小;自带错误预警;相对elastic-job来说不需要额外的组件(zookeeper);支持调度策略;支持分片;文档齐全

    缺点:相对Quartz来说需要多部署调度中心

    总结:针对目前项目情况,利大于弊

3、elastic-job

    优点:支持集群部署;维护成本小

    缺点:elastic-job 需要 zookeeper,zookeeper 集群高可用至少需要三台服务器

    总结:针对目前项目情况,弊大于利

  小结:综合选型原则及三个定时任务框架的优缺点和目前项目的状况,建议选用xxl-job。

三、XXL-JOB的一些特性:

  1、执行失败可以查看日志

  2、支持邮件报警

  3、路由策略支持轮询等策略,可以减轻执行服务器的压力

  4、轮询时间等参数修改后立即生效

  5、执行器有问题或新增,快速识别

  6、调度中心高可用,调度中心可以集群部署(集群部署的机器时钟必须同步),如果调度中心没有做负载在执行器的配置中需要配多个地址,如果调度中心配置负载则执行器配置负载地址即可

  7、执行器高可用(执行器可以集群部署)

四、XXL-JOB与项目结合

  以 springboot 框架为例:

1、添加Maven依赖:

<!--定时器xxljob-->

<dependency>

<groupId>com.xuxueli</groupId>

<artifactId>xxl-job-core</artifactId>

2.0.1

</dependency>       

2、执行器配置文件:

  在 resources 文件夹下新建配置文件 application.properties

### xxl-job admin address list, such as"http://address"or"http://address01,http://address02"

xxl.job.admin.addresses=192.168.22.67:8080/xxl-job-admin/

### xxl-job executor address

xxl.job.executor.appname=xxl-job-executor-sample

xxl.job.executor.ip=192.168.21.88

xxl.job.executor.port=9977

### xxl-job, access token

xxl.job.accessToken=/data/applogs/xxl-job/jobhandler/

### xxl-job log path

xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler

### xxl-job log retention days

xxl.job.executor.logretentiondays=-1

  XXL-JOB执行器的相关配置项的意义,如下所示:

xxl.job.admin.addresses

调度中心的部署地址。若调度中心采用集群部署,存在多个地址,则用逗号分隔。执行器将会使用该地址进行”执行器心跳注册”和”任务结果回调”。

xxl.job.executor.appname

执行器的应用名称,它是执行器心跳注册的分组依据。

xxl.job.executor.ip

执行器的IP地址,用于”调度中心请求并触发任务”和”执行器注册”。执行器IP默认为空,表示自动获取IP。多网卡时可手动设置指定IP,手动设置IP时将会绑定Host。

xxl.job.executor.port

执行器的端口号,默认值为9999。单机部署多个执行器时,注意要配置不同的执行器端口。

xxl.job.accessToken

执行器的通信令牌,非空时启用。

xxl.job.executor.logpath

执行器输出的日志文件的存储路径,需要拥有该路径的读写权限。

xxl.job.executor.logretentiondays

执行器日志文件的定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保存3天,否则功能不生效。

  注意,XXL-JOB执行器的配置文件也可以交给Disconf进行托管。

3、执行器配置类

  新建一个执行器配置类,用来读取执行器的配置信息。在config文件夹下新建一个名为 XxlJobConfig 的类,内容如下:

packagecom.tfjybj.physical.config;

importcom.xxl.job.core.executor.XxlJobExecutor;

importcom.xxl.job.core.executor.impl.XxlJobSpringExecutor;

importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;

importorg.springframework.beans.factory.annotation.Value;

importorg.springframework.context.annotation.Bean;

importorg.springframework.context.annotation.ComponentScan;

importorg.springframework.context.annotation.Configuration;

/**

* xxl-job config

*

*@authorxuxueli 2017-04-28

*/

@Configuration

@ComponentScan(basePackages = "com.tfjybj.physical.provider.job")

publicclassXxlJobConfig{

privateLogger logger = LoggerFactory.getLogger(XxlJobConfig.class);

@Value("${xxl.job.admin.addresses}")

privateString adminAddresses;

@Value("${xxl.job.executor.appname}")

privateString appName;

@Value("${xxl.job.executor.ip}")

privateString ip;

@Value("${xxl.job.executor.port}")

privateintport;

@Value("${xxl.job.accessToken}")

privateString accessToken;

@Value("${xxl.job.executor.logpath}")

privateString logPath;

@Value("${xxl.job.executor.logretentiondays}")

privateintlogRetentionDays;

@Bean(initMethod = "start", destroyMethod = "destroy")

publicXxlJobSpringExecutorxxlJobExecutor(){

logger.info(">>>>>>>>>>> xxl-job config init.");

XxlJobSpringExecutor  xxlJobSpringExecutor  =newXxlJobSpringExecutor ();

        xxlJobSpringExecutor .setAdminAddresses(adminAddresses);

        xxlJobSpringExecutor .setAppName(appName);

        xxlJobSpringExecutor .setIp(ip);

        xxlJobSpringExecutor .setPort(port);

        xxlJobSpringExecutor .setAccessToken(accessToken);

        xxlJobSpringExecutor .setLogPath(logPath);

        xxlJobSpringExecutor .setLogRetentionDays(logRetentionDays);

returnxxlJobSpringExecutor ;

    }

}

XxlJobConfig 配置类有两点需要注意:

组件扫描使用 @ComponentScan 注解,扫描 com.example.demo.jobhandler 包,将其中的任务处理器加载至 Spring 容器。

获取执行器实例 xxlJobExecutor() 方法会实例化一个 XXL-JOB 执行器对象,执行器初始化时调用它的 start() 方法,执行器销毁时调用它的 destroy() 方法。

4、建立任务执行器:

  在 provider 下的 job 下新建 job 测试文件:JobTest.java

packagecom.tfjybj.physical.provider.job;

importcom.xxl.job.core.biz.model.ReturnT;

importcom.xxl.job.core.handler.IJobHandler;

importcom.xxl.job.core.handler.annotation.JobHandler;

importlombok.extern.slf4j.Slf4j;

importorg.springframework.stereotype.Component;

importjava.io.Serializable;

@JobHandler(value = "JobTest")

@Component

@Slf4j

publicclassJobTestextendsIJobHandlerimplementsSerializable{

@Override

publicReturnTexecute(String s)throwsException{

try{

System.out.println("测试~~~");

/*测试数据*/

returnSUCCESS;

}catch(Exception e){

            e.printStackTrace();

returnFAIL;

        }

    }

}

五、执行器(任务调度中心):

访问地址:http://192.168.22.67:8080/xxl-job-admin/jobinfo,登录 XXL-JOB 调度中心

1、任务管理:

  新增任务,更新任务:

2、调度日志:

3、执行器管理:

  新增执行器:

注意,AppName的取值应该和示例工程的 application.properties 文件中的 xxl.job.executor.appname 字段的取值相同,注册方式应该选择自动注册。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容