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

目录

  • 参考
  • Cron表达式详解
    • 表示每个季度执行
  • 导入依赖
  • 添加配置文件
  • 添加配置类
  • 配置
  • 新建测试任务
  • xxl-job-admin维护
    • xxl-job-admin添加执行器
    • 添加任务
    • 测试

参考

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

Cron表达式详解

xxl-job中的cron表达式详解

表达式包含7个部分分别从秒、分、时、日、月、星期、年七个时间维度来确定任务何时每多长时间执行一次。
分布式任务调度XXL-JOB-第二章-SpringBoot集成XXL-JOB_第1张图片

首先各个位置的取值范围

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 , - * /

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

  • ’ * ’ 表示所有的值;
  • ’ ? ’ 表示未说明的值,即并不关心此位置上的值取何范围;
  • ’ - ’ 表示一个指定范围的值;
  • ’ , ’ 表示附加一个可能值,表示为并列关系;
  • ’ / ’ 配合具体的数值使用,在/之前表示什么时间开始,在/之后表示以此数值每次递增;
  • ’ 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秒触发任务

表示每个季度执行

每年一共四个季度,这些日期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 * 

导入依赖

目前版本是2.3.0

<dependency>
	<groupId>com.xuxueligroupId>
	<artifactId>xxl-job-coreartifactId>
	<version>${xxl-job.version}version>
dependency>

添加配置文件

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

添加配置类

@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;
}

配置

@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;
    }
}

新建测试任务

@Slf4j
@Component
@RequiredArgsConstructor
public class XxlJobTest {
    
    @XxlJob("xxlJobTest")
    public ReturnT<String> xxlJobTest(String date) {
        log.info("---------xxlJobTest定时任务执行成功--------");
        return ReturnT.SUCCESS;
    }

}

xxl-job-admin维护

xxl-job-admin添加执行器

回到 http://127.0.0.1:8080/xxl-job-admin/ 界面。
点击执行器管理 -> 新增
分布式任务调度XXL-JOB-第二章-SpringBoot集成XXL-JOB_第2张图片
此处的AppName填你项目中配置的xxl.job.executor.appname名称。选择自动注册,保存即可。

添加任务

点击任务管理 -> 点击执行器下拉框
分布式任务调度XXL-JOB-第二章-SpringBoot集成XXL-JOB_第3张图片

选择刚刚添加的执行器,然后点击“新增”按钮,新增任务:
分布式任务调度XXL-JOB-第二章-SpringBoot集成XXL-JOB_第4张图片

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

测试

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

在这里插入图片描述

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

你可能感兴趣的:(开发组件,spring,boot,分布式,java)