发布时间:2023-10-17 13:00
哈哈哈哈,我又回来了!!!
之前因为换工作,和入职熟悉项目,已经停更了近两个月,说好的产出优质内容,怎么能停下来呢,所以之后无重大原因,还是会持续输出的。
话不多讲,直接进入主题 ----- xxl-job 定时任务
1.1 定时任务是啥?
定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电影券;比如在保证最终一致性的场景中,往往利用定时任务调度进行一些比对工作;比如一些定时需要生成的报表、邮件;比如一些需要定时清理数据的任务等。
1.2 xxl-Job是个什么东西呢?》
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。它的有两个核心模块,一个模块叫做调度中心,另外一个模块叫做执行器,它把任务调度和任务执行分成两个部分。这样调度模块只需要负责任务的调度属性,触发调度信号。执行模块只需要接收调度信号,去执行具体的业务逻辑,两者可以各自的进行扩容和缩容。
架构图
1.2.1 使用 xxl-job >>【springboot 集成】
xxjob下载源码
github地址:https://github.com/xuxueli/xxl-job/
码云地址:https://gitee.com/xuxueli0323/xxl-job
1.2.2 xxl-job 操作界面
项目浏览器访问地址 :http://127.0.0.1:8080/xxl-job-admin/jobinfo
用户名: admin
密码 : 123456
创建定时任务
创建执行器
1.2.3 操作界面不过多赘述 — springboot 整合
引入核心依赖 【版本可自选】
com.xuxueli
xxl-job-core
2.2.0
xxljob:
adminAddresses: http://127.0.0.1:8080/xxl-job-admin
appname: taoci-service
accessToken: ''
logPath: /${spring.application.name}/${logging.file.path}/job/jobhandler/
logRetentionDays: 30
对【application.yml 】文件配置引用
package com.taoci.taoci.stu.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import groovy.util.logging.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 定时任务配置
*
* @author lcc
*/
@Slf4j
@Configuration
@EnableConfigurationProperties(value = XxlJobProperties.class)
//@ConditionalOnProperty(value = "xxljob.enabled", havingValue = "true", matchIfMissing = true)
@ConditionalOnProperty(prefix = "xxljob", name = "enabled", havingValue = "true", matchIfMissing = true)
public class XxlJobConfiguration {
private final XxlJobProperties xxlJobProperties;
public XxlJobConfiguration(XxlJobProperties xxlJobProperties) {
this.xxlJobProperties = xxlJobProperties;
}
@Bean
@ConditionalOnClass()
public XxlJobSpringExecutor xxlJobExecutor() {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses());
xxlJobSpringExecutor.setAppname(xxlJobProperties.getAppname());
//xxlJobSpringExecutor.setIp(xxlJobProperties.getIp());
//xxlJobSpringExecutor.setPort(xxlJobProperties.getPort());
xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken());
xxlJobSpringExecutor.setLogPath(xxlJobProperties.getLogPath());
xxlJobSpringExecutor.setLogRetentionDays(xxlJobProperties.getLogRetentionDays());
return xxlJobSpringExecutor;
}
}
package com.taoci.taoci.stu.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "xxljob")
@Data
public class XxlJobProperties {
private String adminAddresses;
private String appname;
private String ip;
private int port;
private String accessToken;
private String logPath;
private int logRetentionDays;
}
Java中定时任务具体实现
package com.taoci.taoci.stu.task;
import com.taoci.taoci.stu.service.ClassService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Description: 修改班级信息任务
* @Author: liaocongcong
* @Date: 2022/5/22 15:13
*/
@Component
@Slf4j
public class ClassHandlerUpdateClassTask extends IJobHandler {
@Autowired
private ClassService classService;
@XxlJob(value = "classHandlerUpdateClassTask")
@Override
public ReturnT<String> execute(String s) {
log.info("-------------开始修改班级信息任务-----------");
try {
classService.updateClassTask();
} catch (Exception e) {
log.error("修改班级信息任务任务失败 :{}", e);
return ReturnT.FAIL;
}
log.info("-------------班级信息任务修改完成-----------");
return ReturnT.SUCCESS;
}
}
- 中国本地开发,适合中国国情,使用公司,大小公司都有,项目开源,并且稳定
- 支持集群部署;提供运维界面维护成本小;自带错误预警;相对elastic-job来说不需要额外的组件(zookeeper);支持调度策略;支持分片;文档齐全
主要有操作界面,可以实时观察执行日志,可以手动开启任务,极大方便部署之后,通过界面来操作,无需代码重新接入。
缺点:相对Quartz来说需要多部署调度中心 【服务器资源问题了】
@lcc 冲呀,向阳而生