• 分布式任务调度XXL-JOB-第二章-SpringBoot集成XXL-JOB


    参考

    SpringBoot集成XxlJob分布式任务调度中心(超详细之手把手教学)

    Cron表达式详解

    xxl-job中的cron表达式详解

    表达式包含7个部分分别从秒、分、时、日、月、星期、年七个时间维度来确定任务何时每多长时间执行一次。
    在这里插入图片描述

    首先各个位置的取值范围

    0-59 , - * /
    分 0-59 , - * /
    小时 0-23 , - * /
    日期 1-31 , - * ? / L W C
    月份 1-12 或者 JAN-DEC , - * / 可以用0-11 或用字符串 “JAN, FEB, MAR, APR, MAY,
    JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表示
    星期 1-7 或者 SUN-SAT , - * ? / L C # 可以用数字1-7表示(1 = 星期日)或用字符口串“SUN, MON,TUE, WED, THU, FRI and SAT”表示
    年(可选) 留空, 1970-2099 , - * /
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    其中上述出现的,- * /均表示一定的取值范围,具体的含义如下:

    • ’ * ’ 表示所有的值;
    • ’ ? ’ 表示未说明的值,即并不关心此位置上的值取何范围;
    • ’ - ’ 表示一个指定范围的值;
    • ’ , ’ 表示附加一个可能值,表示为并列关系;
    • ’ / ’ 配合具体的数值使用,在/之前表示什么时间开始,在/之后表示以此数值每次递增;
    • ’ L ’ 日期中表示这个月的最后一天;
    • ’ LW ’ 日期中表示这个月的最后一个工作日;
    • ’ L ’ 星期中配合数值表示这个月的最后一个星期几;
    • ’ 数值1 # 数值2 ’ 表示这个月的第(数值2)个星期的星期(数值1) ;
      最后给出一些具体的cron使用示例:
    */5 * * * * ? 每隔5秒执行一次
    0 */1 * * * ? 每隔1分钟执行一次
    0 0 5-15 * * ? 每天5-15点整点触发
    0 0/3 * * * ? 每三分钟触发一次
    0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发 
    0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
    0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
    0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
    0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 
    
    0 0 12 ? * WED 表示每个星期三中午12点
    0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点
    0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发 
    0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
    0 0 23 L * ? 每月最后一天23点执行一次
    0 15 10 L * ? 每月最后一日的上午10:15触发 
    0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发 
    0 15 10 * * ? 2005 2005年的每天上午10:15触发 
    0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发 
    0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
    
    "30 * * * * ?" 每半分钟触发任务
    "30 10 * * * ?" 每小时的10分30秒触发任务
    "30 10 1 * * ?" 每天1点10分30秒触发任务
    "30 10 1 20 * ?" 每月20号1点10分30秒触发任务
    "30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务
    "30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务
    "30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务
    "30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务
    "15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务
    "15-45 * * * * ?" 15到45秒内,每秒都触发任务
    "15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次
    "15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
    "0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次
    "0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务
    "0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务
    "0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务
    "0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务
    "0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    表示每个季度执行

    每年一共四个季度,这些日期March 31,June 30,September 30,Dec 31.

    # 这里最简单的解决方案是在你的crontab中有两个条目 - 一个用于30日,另一个用于31日,例如:
    # 6月,9月的30日执行
     0 0 30 6,9 * 
    # 3月,12月的31日执行
     0 0 31 3,12 * 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    导入依赖

    目前版本是2.3.0

    <dependency>
    	<groupId>com.xuxueligroupId>
    	<artifactId>xxl-job-coreartifactId>
    	<version>${xxl-job.version}version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    添加配置文件

    xxl:
      job:
        admin:
          # xxl-job后台管理界面的地址
          addresses: http://127.0.0.1:8080/xxl-job-admin
        executor:
          # 此执行器的名称
          appname: first-study
          # 此执行器的端口
          port: 38801
          # 此执行器的日志存放路径
          logpath: logs/xxl-job/first-study
          # 此执行器的日志保存时间
          logretentiondays: 7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    添加配置类

    @Configuration
    @Data
    public class XxlJobProperties {
    
        @Value("${xxl.job.admin.addresses}")
        private String adminAddresses;
    
    //    @Value("${xxl.job.accessToken}")
    //    private String accessToken;
    
        @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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    配置

    @Configuration
    @RequiredArgsConstructor
    public class XxlJobConfig {
    
        private final XxlJobProperties xxlJobProperties;
    
        @Bean
        public XxlJobSpringExecutor xxlJobExecutor() {
            XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
            xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses());
            xxlJobSpringExecutor.setAppname(xxlJobProperties.getAppname());
    //        xxlJobSpringExecutor.setAddress(address);
    //        xxlJobSpringExecutor.setIp(ip);
            xxlJobSpringExecutor.setPort(xxlJobProperties.getPort());
    //        xxlJobSpringExecutor.setAccessToken(accessToken);
            xxlJobSpringExecutor.setLogPath(xxlJobProperties.getLogPath());
            xxlJobSpringExecutor.setLogRetentionDays(xxlJobProperties.getLogRetentionDays());
    
            return xxlJobSpringExecutor;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    新建测试任务

    @Slf4j
    @Component
    @RequiredArgsConstructor
    public class XxlJobTest {
        
        @XxlJob("xxlJobTest")
        public ReturnT<String> xxlJobTest(String date) {
            log.info("---------xxlJobTest定时任务执行成功--------");
            return ReturnT.SUCCESS;
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    xxl-job-admin维护

    xxl-job-admin添加执行器

    回到 http://127.0.0.1:8080/xxl-job-admin/ 界面。
    点击执行器管理 -> 新增
    在这里插入图片描述
    此处的AppName填你项目中配置的xxl.job.executor.appname名称。选择自动注册,保存即可。

    添加任务

    点击任务管理 -> 点击执行器下拉框
    在这里插入图片描述

    选择刚刚添加的执行器,然后点击“新增”按钮,新增任务:
    在这里插入图片描述

    注意,此处的JobHandler填@XxlJob注解后面的值。填好点击保存即可。就可以看到我们已经有一条任务了,此时点击“操作”,然后点击“启动”,定时任务就运行了。笔者这里是每分钟运行一次。

    测试

    此时启动我们的测试项目,会发现打印的启动日志已经注册到xxl-job。然后就能看到已经成功执行定时任务并打印日志。
    在这里插入图片描述

    在这里插入图片描述

    到此,搭建到集成整个流程就完毕了。当然xxl-job远不止这点功能,对其他扩展信息感兴趣的小伙伴可以自行上网搜索,也可以访问Xxl-Job官方文档:https://www.xuxueli.com/xxl-job/

  • 相关阅读:
    【组合数学 隔板法 容斥原理】放球问题
    关于YAML配置
    李想的理想,不太「理想」
    面向对象的分析与设计(精品课程)第一章作业
    【基于FreeRTOS的STM32F103系统】简介及官方文件移植
    8款常见的自动化测试开源框架
    React中redux、react-redux、@reduxjs/toolkit状态管理库的使用方式
    Linksys RE7000 “AccessControlList ”命令执行漏洞(CVE-2024-25852 )
    vue3中常见的组合式API
    京东按关键字搜索商品 API 返回值说明
  • 原文地址:https://blog.csdn.net/Blueeyedboy521/article/details/127229781