XXL-Job分布式任务调度,分分钟上手运行!

xxl-job是什么?

XXL-job是一个分布式任务调度平台,其核心设计目标是开发迅速,学习简单,轻量级,易扩展。已开放源代码,开箱即用。

xxl-job初始模块

xxl-job-admin:调度中心(后台模块)

xxl-job-core:公共依赖

xxl-job-executor-samples:执行器Sample示例

xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器;

1.配置 调度中心

/xxl-job/xxl-job-admin/src/main/resources/application.properties

### web
server.port=8080
server.servlet.context-path=/xxl-job-admin
### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false
### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########
### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model
### xxl-job, datasource
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
### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### xxl-job, access token
xxl.job.accessToken=
### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN
## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### xxl-job, log retention days
xxl.job.logretentiondays=30

数据库脚本:

/xxl-job/doc/db/tables_xxl_job.sql

2.部署项目

调度中心访问地址:http://localhost:8080/xxl-job-admin(本地服务)

图片

xxl-job-executor-samples下的一个子模块等同于一个执行器。

图片

一个执行器最核心的文件就是application.properties配置文件:

server.port=8081
#spring.main.web-environment=false
logging.config=classpath:logback.xml
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
xxl.job.accessToken=
xxl.job.executor.appname=xxl-job-sh-sample
xxl.job.executor.address=
xxl.job.executor.ip=
xxl.job.executor.port=9009
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30

通过配置映射到config文件

图片

注入一个Bean(注册到xxl-job-admin 后台)。

图片

运行模式:

BEAN模式:任务以JobHandler方式维护在执行器端;需要结合 “JobHandler” 属性匹配执行器中任务;

GLUE模式(Java):任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码;

GLUE模式(Shell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “shell” 脚本;

GLUE模式(Python):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “python” 脚本;

GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “php” 脚本;

GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “nodejs” 脚本;

GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “PowerShell” 脚本;

以下细讲Bean运行模式和GLUE(Java)模式

  • Bean模式(方法形式)

Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。

  • 优点:
    • 每个任务只需要开发一个方法,并添加”@XxlJob”注解即可,更加方便、快速。
    • 支持自动扫描任务并注入到执行器容器。
  • 缺点:要求Spring容器环境;

操作:

1、任务开发:在Spring Bean实例中,开发Job方法;
2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;
4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;

示例

@XxlJob("getDate")
public ReturnT<String> getDate(String param) throws Exception {
    XxlJobLogger.log("测试成功! 当前时间:"+mt.format(new Date()));
    return ReturnT.SUCCESS;
}

配置完成job方法后,新建调度任务BEAN
图片

注意 JobHandler 的值 一定要对应 方法上@XxlJob()的value值
job方法要符合以下示例模式:
@XxlJob("getDate")
public ReturnT<String> xxx(String param) throws Exception {
    XxlJobLogger.log("xxxxx");
    return ReturnT.SUCCESS;
}
  • GLUE模式(Java)

任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。开发流程如下(GLUE(Java)模式 配置比较简单):

  1. 新建调度任务:

图片

注意:运行模式选择GLUE(Java)

从任务管理器选择,GLUE IDE 进行在线代码编辑即可

图片

无需在项目中新建方法,在线即可创建。

图片

保存即可,此时就新建完成了一个GLUE(Java)运行模式的任务。

路由策略

* FIRST(第一个):固定选择第一个机器;
* LAST(最后一个):固定选择最后一个机器;
* ROUND(轮询):轮询;
* RANDOM(随机):随机选择在线的机器;
* CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上;
* LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
* LEAST_RECENTLY_USED(最近最久未使用):最久未使用的机器优先被选举;
* FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
* BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
* SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;

XXl-job的优点

* 统一管理定时任务,方便手动执行,停止,测试等操作。
* 可以管理分布式任务调度,有多种运行模式。
* xxl-job 简单,界面化对任务进行CRUD操作。
* 架构是讲执行器注册到注册中心,也成调度中心,通过调度中心调度任务。
* 任务执行,无论成功,失败都有日志查看。
* 任务超时,任务失败重试,任务失败警告
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值