当前位置: 首页 > news >正文

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

目录

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

参考

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

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

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

导入依赖

目前版本是2.3.0

<dependency>
	<groupId>com.xuxueli</groupId>
	<artifactId>xxl-job-core</artifactId>
	<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/ 界面。
点击执行器管理 -> 新增
在这里插入图片描述
此处的AppName填你项目中配置的xxl.job.executor.appname名称。选择自动注册,保存即可。

添加任务

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

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

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

测试

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

在这里插入图片描述

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

相关文章:

  • Linux系统下查看被杀死进程的信息
  • 粒子群算法PSO求解最大值和最小值案例(超详细注释)
  • LeetCode每日一题——902. 最大为 N 的数字组合
  • Java学习--JDBC
  • C++中GDAL批量创建多个栅格图像文件并批量写入数据
  • 基于maven的spring项目实现登录注册(SSM)
  • 【C++】动态内存管理
  • 波士顿动力再惊艳!机器人大秀男团舞,举手投足人味满满,多次转卖后展示新标签...
  • Python 代码托管到码云平台,原来这么简单
  • 【MATLAB教程案例26】图像特征点提取算法matlab仿真与分析——sift,surf,kaze,corner,BRISK等
  • 前端深拷贝与浅拷贝(附实现方法)
  • C#工业生产线MES系统,源代码分享
  • 2022软考高项十大领域知识整理(四)-人力资源管理、干系人管理、采购管理
  • 企业级低代码平台Jeecgboot3.4.2及3.4.3版本新功能介绍
  • SQL SERVER Sequence Number 序列号
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [Vue CLI 3] 配置解析之 css.extract
  • CSS居中完全指南——构建CSS居中决策树
  • C学习-枚举(九)
  • java 多线程基础, 我觉得还是有必要看看的
  • Making An Indicator With Pure CSS
  • Material Design
  • PHP 小技巧
  • Python学习笔记 字符串拼接
  • QQ浏览器x5内核的兼容性问题
  • TypeScript迭代器
  • 从零开始的无人驾驶 1
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 前端知识点整理(待续)
  • 如何进阶一名有竞争力的程序员?
  • 进程与线程(三)——进程/线程间通信
  • ​第20课 在Android Native开发中加入新的C++类
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #Linux(make工具和makefile文件以及makefile语法)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (007)XHTML文档之标题——h1~h6
  • (1)STL算法之遍历容器
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (补)B+树一些思想
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计大学生兼职系统
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 使窗口永不获得焦点
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net项目IIS、VS 附加进程调试
  • @Autowired自动装配
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [ Linux ] Linux信号概述 信号的产生
  • [20171106]配置客户端连接注意.txt
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——