likes
comments
collection
share

Springboot 定时任务& xxl-job 简单整合

作者站长头像
站长
· 阅读数 21

什么是定时任务

周期性重复性可持续性 按照一定的时间跨度进行执行的任务,可以理解为定时任务。当然说到定时任务一定离不开 cron 表达式,常见的 定时任务 实现方式有 Quartz 或者Springboot自带的 Scheduled 只需要使用注解 @EnableScheduling 开启定时任务或者实现接口SchedulingConfigurer 添加定时任务 以及今天我们的主角 xxl-job 等方式。

今天我们来使用xxl-job实现定时任务

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。开箱即用 提供WEBUI 进行任务的调度管理 以及任务日志查看统计等功能,最主要的是它对系统的侵入性很低。同时调度中心支持集群部署。

首先第一步先去git或者gitee上拉去项目代码

Springboot 定时任务& xxl-job 简单整合 这里是我拉去下来的代码xxl-job-admin 即项目调度中心也就是WEBUI Springboot 定时任务& xxl-job 简单整合 xxl-job-core 工程是一个抽离出来的公共模块

Springboot 定时任务& xxl-job 简单整合 xxl-job-executor-samples 从命名就能看到是一个例子

Springboot 定时任务& xxl-job 简单整合

我们的项目中如何使用呢

首先引入依赖

<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中先配置一个执行器

Springboot 定时任务& xxl-job 简单整合 AppName 是我们 项目中配置的那个当然也可以手动添加已经存在的执行器

Springboot 定时任务& xxl-job 简单整合 创建成功

Springboot 定时任务& xxl-job 简单整合

在任务管理中添加任务

选择我们创建的执行器 Springboot 定时任务& xxl-job 简单整合 创建成功 Springboot 定时任务& xxl-job 简单整合

进行执行进行测试

正常执行在任务日志中进行查看 Springboot 定时任务& xxl-job 简单整合

实践是检验真理的唯一方法! 明天见🥰🥰🥰