• XXL-Job的基本使用


    一、市面上常见的任务调度产品

            针对分布式任务调度的需求,市场上出现了很多的产品:

             其中XXL-job 是我们经常使用的任务调度平台,XXL这三个英文字母.是以作者名许雪里命名的。

            可以前往 Gitee 地址进行下载使用

    https://gitee.com/xuxueli0323/xxl-job.git
    

     

    二、XXL-JOB的基本使用 

            在Gitee地址下载完XXL-job 的项目后,项目的结构如下:

    2.1、启动xxl-job-admin服务

             首先启动xxl-job-admin,并在配置文件中修改对应的端口号以及虚拟路径,配置文件中部分默认的参数如下:

     

            xxl-job-admin服务是XXL-JOBweb页面端,所以启动完xxl-job-admin服务后,可以访问:

    http://localhost:8080/xxl-job-admin/

    账号:admin

    密码:123456

             

    2.2、登陆xxl-job的web页面

    2.2.1、执行器管理

            执行器管理页面中有一个默认的执行器xxl-job-executor-sample,下面来介绍如何编辑执行器。

            AppName是执行器的唯一标示,所以不能重复

            名称可以自己随便写,但是最好见名知意,帮助我们快速的了解这个执行器的作用。

            注册方式是调度中心获取执行器地址的方式 ,一般选自动注册。

    自动注册和手动录入的区别:

     

    总结:           

     

    2.2.2、任务管理 

            任务管理页面是用来编辑任务执行的,下面来介绍如何编辑任务管理。

    执行器:每一个任务要对应一个执行器,所以要选择一个执行器,可供选择的执行器,就是在2.2.1中编辑好的执行器。

    任务描述:此次任务的作用是什么。

    负责人:这个任务的负责人是谁。

    调度类型:CRON、无、固定速度

            CRON:是通过CRON表达式来控制任务调用的时间,这个在后面会做一个详细的介绍。

            无:不调用

            固定速度:以固定的时间进行调用,例如每隔5秒进行调用,这个通过CRON表达式也能实现,所以不推荐使用固定速度。

    运行模式:运行模式主要分为BEANGLUEBEAN是通过java代码进行运行,GLUE是通过脚本的方式进行运行(有些银行的就是采用这种方式)

    JobHander:运行模式采用BEAN,右边就会出现JobHander,JobHander中的值可以任意写,但是要和代码中的值保持一致,代码中通过@XxlJob注解和JobHander中的值相对应

    路由策略:

            当执行器集群部署时,提供丰富的路由策略

    阻塞处理策略:调度过于密集执行器来不及处理时的处理策略

     

    2.3、启动xxl-job-executor-sample-springboot

     xxl-job-executor-sample-springboot 中配置文件里面需要注意的有:

            xxl.job.admin.addresses:对应2.1中web页面的IP地址、端口号、虚拟路径等

            xxl.job.executor.appname:对应2.2.1中执行器的AppName

            xxl.job.executor.port:对应执行器的端口号(和server.port中的端口号不一样)。

           

    在 xxl-job-executor-sample-springboot中可以看见XxlJobConfig用来读取配置文件中的值

    1. package com.xxl.job.executor.core.config;
    2. import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
    3. import org.slf4j.Logger;
    4. import org.slf4j.LoggerFactory;
    5. import org.springframework.beans.factory.annotation.Value;
    6. import org.springframework.context.annotation.Bean;
    7. import org.springframework.context.annotation.Configuration;
    8. /**
    9. * xxl-job config
    10. *
    11. * @author xuxueli 2017-04-28
    12. */
    13. @Configuration
    14. public class XxlJobConfig {
    15. private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
    16. @Value("${xxl.job.admin.addresses}")
    17. private String adminAddresses;
    18. @Value("${xxl.job.accessToken}")
    19. private String accessToken;
    20. @Value("${xxl.job.executor.appname}")
    21. private String appname;
    22. @Value("${xxl.job.executor.address}")
    23. private String address;
    24. @Value("${xxl.job.executor.ip}")
    25. private String ip;
    26. @Value("${xxl.job.executor.port}")
    27. private int port;
    28. @Value("${xxl.job.executor.logpath}")
    29. private String logPath;
    30. @Value("${xxl.job.executor.logretentiondays}")
    31. private int logRetentionDays;
    32. @Bean
    33. public XxlJobSpringExecutor xxlJobExecutor() {
    34. logger.info(">>>>>>>>>>> xxl-job config init.");
    35. XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
    36. xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
    37. xxlJobSpringExecutor.setAppname(appname);
    38. xxlJobSpringExecutor.setAddress(address);
    39. xxlJobSpringExecutor.setIp(ip);
    40. xxlJobSpringExecutor.setPort(port);
    41. xxlJobSpringExecutor.setAccessToken(accessToken);
    42. xxlJobSpringExecutor.setLogPath(logPath);
    43. xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
    44. return xxlJobSpringExecutor;
    45. }
    46. /**
    47. * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
    48. *
    49. * 1、引入依赖:
    50. *
    51. * org.springframework.cloud
    52. * spring-cloud-commons
    53. * ${version}
    54. *
    55. *
    56. * 2、配置文件,或者容器启动变量
    57. * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
    58. *
    59. * 3、获取IP
    60. * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
    61. */
    62. }

    SampleXxlJob类中,用来执行任务。

    1. @Component
    2. public class SampleXxlJob {
    3. private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
    4. /**
    5. * 1、简单任务示例(Bean模式)
    6. */
    7. @XxlJob("demoJobHandler")
    8. public void demoJobHandler() throws Exception {
    9. XxlJobHelper.log("XXL-JOB, Hello World.");
    10. for (int i = 0; i < 5; i++) {
    11. System.out.println("执行了第"+i+"次");
    12. //XxlJobHelper.log("beat at:" + i);
    13. TimeUnit.SECONDS.sleep(2);
    14. }
    15. // default success
    16. }
    17. }

            SampleXxlJob中@XxlJob的值要和2.2.2任务管理中JobHander的值保持一致。再启动xxl-job-executor-sample-springboot服务。

            启动了xxl-job-executor-sample-springboot服务以及xxl-job-admin服务后,在任务管理页面点击执行一次,即可发起调用。

    发现调用成功

     

    三、 Corn表达式

            2.2.2中可以通过Corn表达式来控制任务调度的时间,以下是Corn表达式中符号的含义 

            以下面这个 Corn表达式为例

            

    6-21:在时域,表示从早上6点到晚上9点执行。(“-”:指定一个范围,可以看上表)

    0/5:在分域,表示每5分钟执行一次。(“/”:表示递增,可以看上表)

    0:在秒域,表示第0秒执行。

    连起来就是:早上6点到晚上9点这个时间段内,每隔5分钟执行一次。

    例如:06:05:00、06:10:00、06:15:00、06:20:00、06:25:00,一直执行到晚上9点55分。

            另外:我后面在天域和月域中设置了通配符“*”,表示每月的每天执行。所以就是永远在执行,所以在年域和周域用“?”,“不指定”也不影响。

     

  • 相关阅读:
    redis-shake同步数据
    svn(乌龟svn)和SVN-VS2022插件(visualsvn) 下载
    PCB元件创建
    AI人工智能—数据标注的主要类型和标注注意事项
    BIO、NIO、AIO、多路复用IO
    基因组大小查询(二)|基因组组装结果查询
    Day28——复原IP地址、子集、子集||
    EDA实验------数控分频器设计(QuartusII)
    求先序遍历序列中第(1<=k<=二叉树中结点个数)个结点的值
    通用汽车在华加速推出智能电动车型
  • 原文地址:https://blog.csdn.net/m0_68201836/article/details/136431383