xxl-job(分布式任务调度平台)的介绍和使用

xxl-job(分布式任务调度平台)的介绍和使用

    • 1.传统的定时任务
      • 1.1实现方式
      • 1.2缺点分析
    • 2.初识xxl-job
    • 3.xxl-job实战
      • 3.1下拉xxl-job源码
      • 3.2构建本地数据库
      • 3.3修改admin的application.properties并启动管理后台
      • 3.3编写执行器代码并测试定时任务

1.传统的定时任务

1.1实现方式

在启动类上使用@EnableScheduling注解,表示开启定时任务

@SpringBootApplication
@EnableScheduling
public class XxlJobExecutorApplication {
	public static void main(String[] args) {
        SpringApplication.run(XxlJobExecutorApplication.class, args);
	}
}

根据业务需要,在方法上使用@Scheduled注解,cron属性配置定时规则

@Component
public class ScheduledTask {
    private final static Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
    @Scheduled(cron = "0/10 * * * * ?") //每10秒执行一次
    public void scheduledTaskByCorn() {
        logger.info("定时任务开始 ByCorn:" + new Date());
        scheduledTask();
        logger.info("定时任务结束 ByCorn:" + new Date());
    }
    private void scheduledTask() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

启动项目就可以看控制台看到定时任务执行效果
xxl-job(分布式任务调度平台)的介绍和使用_第1张图片

1.2缺点分析

不支持集群:集群情况下容易造成任务重复问题
不支持失败重试:失败即结束,不支持重试
不支持动态调整:修改任务参数时需要修改代码,并且要重启服务
无报警机制:任务失败后没有提醒功能
无统一管理:没有办法手动关闭或开启任务

2.初识xxl-job

XXL-JOB是一个开源的,具有丰富的任务管理功能以及高性能,高可用等特点的轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展、开箱即用!!!
系统组成:

  • 调度模块(调度中心): 负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块; 支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover
  • 执行模块(执行器): 负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效; 接收“调度中心”的执行请求、终止请求和日志请求等
    xxl-job(分布式任务调度平台)的介绍和使用_第2张图片
    xxl-job(分布式任务调度平台)的介绍和使用_第3张图片

3.xxl-job实战

3.1下拉xxl-job源码

官方文档:https://www.xuxueli.com/xxl-job/
github地址:https://github.com/xuxueli/xxl-job
gitee地址:https://github.com/xuxueli/xxl-job
xxl-job(分布式任务调度平台)的介绍和使用_第4张图片
可分为有四大模块
doc:存放相关文档
xxl-job-admin:调度中心管理后台
xxl-job-core:框架核心包
xxl-job-executor-samples:集成不同执行器的案例代码
注:本次实战使用的是xxl-job2.1.2版本

3.2构建本地数据库

xxl-job(分布式任务调度平台)的介绍和使用_第5张图片
可在这个目录下找到对应sql,并在本地执行创建项目所需要的数据库
xxl-job(分布式任务调度平台)的介绍和使用_第6张图片

3.3修改admin的application.properties并启动管理后台

修改数据库连接
xxl-job(分布式任务调度平台)的介绍和使用_第7张图片
启动后,访问http://localhost:8080/xxl-job-admin;默认登录账户名:admin。登录密码:123456
xxl-job(分布式任务调度平台)的介绍和使用_第8张图片
这是登录后先来到运行列表界面,这里以图形化来展示任务整体的执行情况
xxl-job(分布式任务调度平台)的介绍和使用_第9张图片
这是查看调度日志,根据日志来查看任务具体的执行情况
xxl-job(分布式任务调度平台)的介绍和使用_第10张图片

这是配置执行器,这边选择自动注册就行,等执行器启动的时候会被调度中心监听到并加入地址列表
xxl-job(分布式任务调度平台)的介绍和使用_第11张图片
这是配置任务执行任务的,以新配置的测试任务2为例
xxl-job(分布式任务调度平台)的介绍和使用_第12张图片
路由策略:多用于集群时的配置。这里属于本机测试,所以选第一个
Cron:执行规则,这里定的是两秒执行一次
JobHandler:定义执行器的名字,这里使用的是MyJobHandler

3.3编写执行器代码并测试定时任务

这里以xxl-job-executor-sample-springboot为例:
修改配制文件
xxl.job.admin.addresses:为调度中心的地址
xxl.job.executor.appname:这里对应的是执行器的AppName
xxl.job.executor.port:这里为RPC的监听端口
xxl-job(分布式任务调度平台)的介绍和使用_第13张图片

编写执行任务,有两种方式
方式一:Bean模式(在方法上使用@XxlJob注解定义执行器)

@Component
public class SampleXxlJob {

    @XxlJob("demoJobHandler")
    public ReturnT<String> demoJobHandler(String param) throws Exception {
        System.out.println("来了!老弟:" + param);
        return new ReturnT<String>(200, "demoJobHandler任务成功");
    }
}

我们执行测试任务1看看效果
xxl-job(分布式任务调度平台)的介绍和使用_第14张图片
在调度日志里面找出刚刚执行的任务,执行是成功的,这个执行备注就是构造方法ReturnT的第二个参数msg
xxl-job(分布式任务调度平台)的介绍和使用_第15张图片
方式二:继承IJobHandler的模式(并且在类上使用@JobHandler注解定义执行器)

@JobHandler(value = "MyJobHandler")
@Component
public class MyJobHandler extends IJobHandler {

    @Override
    public ReturnT<String> execute(String param) throws Exception {
        try {
            int a = 10;
            int b = 0;
            System.out.println(a/b);
        } catch (Exception e) {
            StringWriter stringWriter= new StringWriter();
            PrintWriter writer= new PrintWriter(stringWriter);
            e.printStackTrace(writer);
            StringBuffer buffer= stringWriter.getBuffer();
            return new ReturnT<String>(500, buffer.toString());
        }
        return new ReturnT<String>(200, "MyJobHandler任务成功");
    }
}

这里我自己创建了一个异常,就是为了测试调度中心是否可以捕捉到异常信息
那我们现在来执行测试任务2吧
可以看出这次调度是通的,但是执行过程中出现了异常,所以执行结果是失败的,并且异常信息也详细地展示出来
xxl-job(分布式任务调度平台)的介绍和使用_第16张图片
下一篇写一个xxl-job在实际项目中的应用,xxl-job + webSocket实现数据大屏动态展示
感谢您的阅读,希望对您有所帮助,不足之处也希望多探讨!

你可能感兴趣的:(中间件学习笔记,java,分布式)