点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试文章

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

本教程主要介绍怎么在spring boot工程中快速使用xxl-job。详细的xxl-job的使用文档请参考:https://www.xuxueli.com/xxl-job/

简介

在xxl-job中,有2个角色:

  • 一个是调度任务管理系统,xll-job-admin

  • 另一个是xxl-job-excutor,通常是我们业务系统,比如本案例的springboot业务系统。

整个调度任务执行流程如下:

  • Xxl-job-admin官方代码已经写好,不做定制化开发的话,直接启动即可正常运行。启动Xxl-job-admin工程。

  • xxl-job-excuotr需要配置xxl-job-admin的地址,主动向Xxl-job-admin注册,并建立netty连接。在xxl-job-excutor中需要实现excutor的业务代码。

xxl-job-admin

Xxl-job-admin是调度任务的管理中心。所有的excutor都会向xxl-job-admin注册,注册完成之后可以对excutor进行任务分发。

在官网中下载最新的release代码,比如本文中的v2.2.0版本,下载地址为https://github.com/xuxueli/xxl-job/releases。

Xxl-job-admin需要Mysql数据库,请提前准备安装好。然后在数据库中导入代码工程中的doc/sql目录下的s ql文件。

然后修改xxl-job-admin工程中的resources中的application.properties的数据库配置,如下:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

修改之后,启动XxlJobAdminApplication的main函数,xxl-job-admin启动成功。

在浏览器上访问http://localhost:8081/xxl-job-admin/ ,登陆用户名为admin,密码为123456。登陆成功后,显示的界面如下:

xxl-job-excutor

xxl-job-excutor是任务的执行单元,需要在业务系统中去实现。本案例中是一个springboot的工程,此工程需要集成xxl-job作为任务执行单元。在工程的pom.xml文件中引入xxl-job-core的依赖如下:

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.2.0</version>
</dependency>

在工程的application.properties中配置xxl.job.admin.addresses的地址,配置含义见注释,具体配置如下:

# web port
server.port=8082
# no web
#spring.main.web-environment=false# log config
logging.config=classpath:logback.xml### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8081/xxl-job-admin### xxl-job, access token
xxl.job.accessToken=### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=../applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30

需要初始化一个XxlJobSpringExecutor,该类用于处理xxl-job-admin和xxl-job-excutor之间的通讯以及任务的处理。

@Configuration
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.appname}")private String appname;@Value("${xxl.job.executor.address}")private String address;@Value("${xxl.job.executor.ip}")private String ip;@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}
}

注册一个任务,任务名为demoJobHandler。

@Component
public class SampleXxlJob {private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);/*** 1、简单任务示例(Bean模式)*/@XxlJob("demoJobHandler")public ReturnT<String> demoJobHandler(String param) throws Exception {XxlJobLogger.log("XXL-JOB, Hello World.");logger.info("XXL-JOB, Hello World. params:"+param);for (int i = 0; i < 5; i++) {XxlJobLogger.log("beat at:" + i);TimeUnit.SECONDS.sleep(2);}return ReturnT.SUCCESS;}}

在xxl-job-admin中可以看到demoJobHandler的配置,在控制台启动任务。

启动任务后,可以看到执行任务的日志。同时在xxl-job-excutor中可以看到任务执行的业务日志。

源码下载

https://github.com/forezp/distributed-lab/tree/master/xxl-job

热门内容:分布式锁用 Redis 还是 Zookeeper?写那么多年Java,还不知道啥是Java agent 的必须看一下!
科普|什么是负载均衡(Load balancing)干掉GuavaCache:Caffeine才是本地缓存的王
稳~阿里程序员常用的 15 款开发者工具四连问:API 接口应该如何设计?如何保证安全?如何签名?如何防重?最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡

五分钟体验分布式调度框架xxl-job相关推荐

  1. 五分钟体验分布式事务框架Seata

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单 ...

  2. druid seata 配置_五分钟体验分布式事务框架Seata

    Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案.本教程 ...

  3. 分布式调度框架 elastic-job 实践详解(超详细)

    虽然 Quartz 也可以通过集群方式来保证服务高可用,但是它也有一个的弊端,那就是服务节点数量的增加,并不能提升任务的执行效率,即不能实现水平扩展! 之所以产生这样的结果,是因为 Quartz 在分 ...

  4. 【JEECG TBSchedule】详解应对平台高并发的分布式调度框架TBSchedule

    原文地址:http://geek.csdn.net/news/detail/65738 [编者按] TBSchedule是一款非常优秀的高性能分布式调度框架,本文是作者结合多年使用TBSchedule ...

  5. 详解应对平台高并发的分布式调度框架TBSchedule

    TBSchedule是一款非常优秀的高性能分布式调度框架,本文是作者结合多年使用TBSchedule的经验,在研读三遍源码的基础上完成.期间作者也与阿里空玄有过不少技术交流,并非常感谢空玄给予的大力支 ...

  6. 媲美celery的分布式调度框架funboost

    最近项目中缺乏一款分布式框架,在github上闲逛时,找到了一款分布式调度框架.按照国惯例先上链接:https://github.com/ydf0509/funboost.该框架是由国人ydf开发的, ...

  7. 分布式调度框架Elastic-Job和xxl-job区别

    分布式调度框架Elastic-Job和xxl-job区别还是比较明显的,首先明确一下共同点,即它们俩共同解决的问题是什么? 一.解决传统定时任务存在的问题: 1.业务耦合 : 如果需要修改定时任务时间 ...

  8. 主流的分布式调度框架、Elastic-job简介、功能和常用介绍

    主流的分布式调度框架.Elastic-job简介.功能和常用介绍 主流的分布式调度框架 Elastic-job简介 功能 常用 主流的分布式调度框架 elastic-job:由当当网基于quartz ...

  9. 分布式调度框架elasticJob对Curator的使用解析

    前言: 由于公司使用到elasticJob作为分布式调度框架的基础,所以也多多少少研究了一下这个框架. 任务调度的框架有很多,单机情况下我们可以用Quartz,但是分布式调度的情况下,Quartz就无 ...

最新文章

  1. 使用PowerDesigner创建数据库表
  2. 详解 Android 的 Activity 组件
  3. IEEE JBHI 投稿因格式问题打回记录
  4. js的alert和confirm美化
  5. 随机森林的原理及Python代码实现
  6. linux 卸载nfs device is busy,NFS umount 提示 device is busy
  7. 3+1活动:结交一个朋友、参与一项运动 、培养一个兴趣爱好 、阅读一本好书
  8. 我的编程之路上的点滴记录【一】
  9. 解决目前无法下载电驴资源的方法
  10. 宝马公司错过了一次绝佳的营销机会
  11. python祝福代码_python实现弹窗祝福效果
  12. java 内存检测工具
  13. 趣图:这种贱贱的骚操作,你们试过么?
  14. 学好编程之GOC语言快速入门(1)
  15. Java实现字符串倒序输出的四种方法
  16. 关于产业竞争力的评价指标
  17. python输入一个三位数_Python 三位一并法
  18. 精灵混合加密系统_为什么要加密数据?
  19. AP2400 LED多功能 驱动 降压恒流芯片
  20. uniapp的微信支付

热门文章

  1. AtcoderCodeForces杂题11.6
  2. 【Computer Vision】 复现分割网络(1)——SegNet
  3. qmake 简易教程
  4. malloc函数分配失败处理的严重性
  5. Linq基础知识小记二
  6. [JAVA] DUMP
  7. Mac环境下svn的使用
  8. antlr.collections.AST.getLine()I问题的起因及解决
  9. 刻意练习:LeetCode实战 -- Task21. 二叉树的最大深度
  10. MySQL之父等国际数据库掌门人齐聚,1024 程序员节全体大会重磅官宣!