一个极其简单方便的自动化任务的工具——xxl-
前言
想必你可能遇到过一个情况你的领导有时候会给你说一句,要不你去写一个定时任务去执行不就行了。也许你不知道怎么写,这篇文章就能让你快速掌握如何自己创建一个自动化任务。
简介说说什么是自动任务吧!简而言之就是在特定时间上自动执行,不需要人为去执行。常见的自动化任务的工具有很多,比如说Quartz 、spring task、xxl-job等。在说这些东西执行,一定要先了解一下cron表达式
cron表达式cron表达式是一个字符串, 用来设置定时规则, 由七部分组成, 每部分中间用空格隔开
,cron表达式还包含了一些特殊符号来设置更加灵活的定时规则。
光看这些可能很难理解,下面是一些例子
其实这个东西,你只要知道是什么就行了,刚开始的时候,直接cron表达式生成查找就行了,后面做的多了自然就知道怎么写了。
我们先说一下xxl-job,它是一个分布式任务调度平台。
特点
-
简单灵活
- 提供的有eb页面可以进行管理,可以非常直观的看到具体情况
-
丰富的任务管理功能
- 支持页面对任务CRUD操作;
- 支持在页面编写脚本任务、命令行任务、Java代码任务并执行;
- 支持任务级联编排,父任务执行结束后触发子任务执行;
- 支持设置指定任务执行节点路由策略,包括轮询、随机、广播、故障转移、忙碌转移等;
- 支持Cron方式、任务依赖、调度中心API接口方式触发任务执行
-
高性能
- 任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰
-
高可用
- 任务调度中心、任务执行节点均 集群部署,支持动态扩展、故障转移
- 支持任务配置路由故障转移策略,执行器节点不可用是自动转移到其他节点执行
- 支持任务超时控制、失败重试配置
- 支持任务处理阻塞策略调度当任务执行节点忙碌时来不及执行任务的处理策略,包括串行、抛弃、覆盖策略
-
易于监控运维
- 支持实时查看任务执行运行数据统计图表、任务进度监控数据、任务完整执行日志
如何使用呢?
- 要下载源码
下载完源码之后打开就是这样的。
把里面db中的表导入你的数据库中
- xxl_job_group执行器信息表,维护任务执行器信息; - xxl_job_info调度扩展信息表 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等; - xxl_job_lock任务调度锁表; - xxl_job_log调度日志表 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等; - xxl_job_logglue任务GLUE日志用于保存GLUE更新历史,用于支持GLUE的版本回溯功能; - xxl_job_registry执行器注册表,维护在线的执行器和调度中心机器地址信息; - xxl_job_user系统用户表;
- 配置调度中心(xxl-job-admin)
配置该模块的数据源,然后启动,就能访问到xxl-job-admin的eb界面了,默认的账户密码是admin/123456
3.使用管理中心
建立执行器
按道理 一个项目一个执行器 便于管理。代表的意思是我们的任务用这个执行器进行执行。
新建任务
启动就可以了
上面说的只是说这个东西怎么用,具体集成主要分为两步。
第一步
将你下载的xxl-job的源码中的
这个核心模块安装到你的maven仓库中保证你可以使用
安装步骤
第二步
在你的项目里面引入xxl-job的依赖
.xuxueli xxl-job-core2.2.0-SNAPSHOT
配置xxl-job的配置
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin ### xxl-job, aess token xxl.job.aessToken= ### xxl-job executor appname xxl.job.executor.appname=xxl-job-executor-sample2 ### xxl-job executor registry-address: default use address to registry , otherise 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=/data/applogs/xxl-job/jobhandler ### xxl-job executor log-retention-days xxl.job.executor.logretentiondays=30
logback.xml
logback %d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n ${log.path} ${log.path}.%d{yyyy-MM-dd}.zip %date %level [%thread] %logger{36} [%file : %line] %msg%n
编写配置类
@Configuration public class XxlJobConfig { private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); @Value("${xxl.job.admin.addresses}") private String adminAddresses; @Value("${xxl.job.aessToken}") private String aessToken; @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; @Bean public XxlJobSpringExecutor xxlJobExecutor() { logger.info(">>>>>>>>>>> xxl-job config init."); XxlJobSpringExecutor xxlJobSpringExecutor = ne XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); xxlJobSpringExecutor.setAppName(appName); xxlJobSpringExecutor.setAddress(address); xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAessToken(aessToken); xxlJobSpringExecutor.setLogPath(logPath); xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; } }
创建定时任务
@Component public class HelloJob { @XxlJob("job_hander01") public ReturnTdemoJobHandler(String param) thros Exception { System.out.println("当前任务执行了...."+ne Date()); return ReturnT.SUCCESS; } }
这个主要是使用那个 @XxlJob 注解
注意点(三个)
-
这个注解里面的值必须与你在xxl-job-admin中配置的
保持一致,他要根据这个进行找你配置的定时任务是哪一个 -
上面写的logback.xml配置文件不是必须的,也可以不要
-
使用的环境maven3+、jdk1.8+ 、mysql5.7+
这个springboot与xxl-job的融合 ,你下的源码里面提供的也有
你也可以看看