ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

xxl-job(分布式任务调度平台)学习笔记 2022-07-25

2022-07-25 15:01:51  阅读:186  来源: 互联网

标签:执行器 25 07 任务 job new 任务调度 public xxl


原文地址:https://blog.csdn.net/weixin_43821679/article/details/109896696

1、传统定时任务

1.1 实现方法

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

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

1.1.2 根据业务需要,在方法上使用@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();
        }
    }
}

1.1.3 启动项目就可以看控制台看到定时任务执行效果

1.2 缺点分析

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

2 初识xxl-job

3 xxl-job实战

3.1 源码


可分为有四大模块
doc:存放相关文档
xxl-job-admin:调度中心管理后台
xxl-job-core:框架核心包
xxl-job-executor-samples:集成不同执行器的案例代码

3.2 构建本地数据库


可在这个目录下找到对应sql,并在本地执行创建项目所需要的数据库

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

修改数据库连接,主要是修改username与password

启动后,访问http://localhost:8080/xxl-job-admin;
默认登录账户名:admin
登录密码:123456

登录后先来到运行列表界面,这里以图形化来展示任务整体的执行情况

任务管理,配置任务执行任务
调度日志,根据日志来查看任务具体的执行情况
执行器管理,选择自动注册就行,等执行器启动的时候会被调度中心监听到并加入地址列表

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

这里以xxl-job-executor-sample-springboot为例:
修改配制文件
xxl.job.admin.addresses:为调度中心的地址
xxl.job.executor.appname:这里对应的是执行器的AppName
xxl.job.executor.port:这里为RPC的监听端口

编写执行任务,有两种方式
方式一: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任务成功");
}

}

方式二:继承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任务成功");
    }
}

标签:执行器,25,07,任务,job,new,任务调度,public,xxl
来源: https://www.cnblogs.com/ziweigege/p/16516248.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有