轻量级分布式任务调度平台--XXLJOB
概述:
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展
Quartz作为开源任务调度中的佼佼者,但是存在一些不足:
- 通过调用API的方式操作任务,不人性化。
- 需要持久化业务的QuartzJobBean到底层数据表中,系统侵入性相当严重。
- 调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况下,此时调度系统的性能将大大受限于业务。 因此xxlJob目前比较受欢迎。
XXLJOB分为两个模块:调度模块,任务模块
调度模块 : 负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。
执行模块: 负责接收调度请求并执行任务逻辑.
xxlJob工程搭建及测试:
xxl-job github 地址:https://github.com/xuxueli/xxl-job 将项目拉下来 后面调度模块要用到
主要用到xxl-job-admin工程,将配置文件中的端口号和数据库地址修改为自己本地的地址
之后启动springboot工程,访问http://localhost:7001/xxl-job-admin/ 账户/密码 : admin/123456
左侧的任务管理可以让我们修改增加删除自己建的任务,如下:
任务模块:
1.添加pom依赖:
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>1.9.1</version> </dependency> |
2.配置文件:
public class BaseConfig { @Value("${xxl.job.admin.addresses}") private String jobAddress; @Value("${xxl.job.executor.ip:}") private String jobIp; @Value("${xxl.job.executor.port:0}") private int jobPort; @Value("${xxl.job.accessToken}") private String jobAccessToken; @Value("${xxl.job.executor.logpath}") private String jobLogPath; @Value("${xxl.job.executor.logretentiondays}") private int jobLogRetentionDays; } 注:xxl.job.admin.addresses 等xxlJob配的的一些值可以在Apollo或者application.properties中配置 例:在application.properties中: server.port=8084 |
3.测试类
@JobHandler(value = "ReportHandler4New") @Component @Slf4j /** * @author zy * @date 04-16 */ public class BuildHander4NewReport extends IJobHandler { private static Logger logger = LoggerFactory.getLogger(BuildHander4NewReport.class); @Autowired private BaseConfig config; @Autowired private BuilderTask4NewReport task4NewReport; @Override public ReturnT<String> execute(String s) throws Exception { String batchNO = ""; try { batchNO = DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS"); logger.error("xxl-job for report start... batchNO:{}", batchNO); XxlJobLogger.log(batchNO); //简单业务 String flag = isNightExecuteTime() ? "1" : "0"; List<Map> jobList = new Eql("REPORT").select("queryJobList").params(RMap.asMap("flag",flag)).execute(); //调度日志 XxlJobLogger.log(jobList.toString()); buildFile(jobList); logger.error(batchNO); } catch (Exception e) { XxlJobLogger.log(e); logger.error("batchNO:{},系统异常:{}", batchNO, e); if (e instanceof InterruptedException) { throw e; } } return SUCCESS; } |
4.配置定时任务
执行器名称:自己定义, 任务描述:自己定义
cron:cron表达式,规定执行的时间规则 jobHandler: 任务模 式中的名称,见第三步
@JobHandler(value = "ReportHandler4New")这个的值
路由策略,和运行模式有很多种。。。。。自行百度,
到此为止一个轮询任务就已经完成了。
5.调度日志
最后可以在调度日志中查看日志。
大功告成!!!