Springboot 定时任务& xxl-job 简单整合
什么是定时任务
周期性丶重复性丶可持续性 按照一定的时间跨度进行执行的任务,可以理解为定时任务。当然说到定时任务一定离不开 cron 表达式,常见的 定时任务 实现方式有 Quartz 或者Springboot自带的 Scheduled 只需要使用注解 @EnableScheduling 开启定时任务或者实现接口SchedulingConfigurer 添加定时任务 以及今天我们的主角 xxl-job 等方式。
今天我们来使用xxl-job实现定时任务
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。开箱即用 提供WEBUI 进行任务的调度管理 以及任务日志查看统计等功能,最主要的是它对系统的侵入性很低。同时调度中心支持集群部署。
首先第一步先去git或者gitee上拉去项目代码
这里是我拉去下来的代码xxl-job-admin 即项目调度中心也就是WEBUI
xxl-job-core 工程是一个抽离出来的公共模块
xxl-job-executor-samples 从命名就能看到是一个例子
我们的项目中如何使用呢
首先引入依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.1</version>
</dependency>
在配置文件中设置调度中心的地址以及其他的信息
# web port
server.port=8081
# no web
#spring.main.web-environment=false
logging.config=classpath:logback.xml
### 这个地址可以是一个数组 即多个调度中心
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 通信用的令牌
xxl.job.accessToken=default_token
### 执行器的名称
xxl.job.executor.appname=xxl-job-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
下面是我们的配置类
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
//webUI 地址
@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;
//IP地址
@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;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
下面我们编写我们的任务
@Component
public class MyXxlJob {
private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
//这种模式是Bean的模式
@XxlJob("myJobHandler")
public void myJobHandler() throws Exception {
XxlJobHelper.log("XXL-JOB, 画船听雨眠.");
logger.info("开始执行..........");
for (int i = 0; i < 5; i++) {
XxlJobHelper.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
logger.info("执行完成..........");
}
}
下面我们去WEB-UI中先配置一个执行器
AppName 是我们 项目中配置的那个当然也可以手动添加已经存在的执行器
创建成功
在任务管理中添加任务
选择我们创建的执行器
创建成功
进行执行进行测试
正常执行在任务日志中进行查看
实践是检验真理的唯一方法! 明天见🥰🥰🥰
转载自:https://juejin.cn/post/7110445086130831396