Springboot项目整合xxl -job 任务调度中心

当项目中含有定时任务的时候,为方便管理定时任务,这时候可以考虑整合xxl-job任务调度中心,整合十分简单。

下载xxj-job源码,下载地址:码云地址
github地址

下载好解压,目录结构:
Springboot项目整合xxl -job 任务调度中心_第1张图片

第一步 生成基础表

进入doc >> db 文件夹,运行sql文件,生成框架需要的数据库表:
Springboot项目整合xxl -job 任务调度中心_第2张图片

第二步 配置后台管理端

打开项目工程,已idea为例:
Springboot项目整合xxl -job 任务调度中心_第3张图片
修改admin工程的配置文件:context-path 为访问路径,记住admin项目启动端口,定时任务回调会使用
Springboot项目整合xxl -job 任务调度中心_第4张图片
然后启动项目,也可以将项目打包成jar文件,通过Java -jar命令执行,需要先将父工程打包,然后在打包admin项目。

访问后台管理页面

输入地址:localhost:8080/job 用户名:admin 密码 123456

Springboot项目整合xxl -job 任务调度中心_第5张图片
需要配置执行器,新建任务,提供日志、报表等功能。

第三步 集成xxl-job

在自己的springboot项目中,集成xxl-job:
在配置文件中加入以下配置:

1、配置后台管理端地址
2、appname值非常重要,配置执行器需要和这个保持一直
Springboot项目整合xxl -job 任务调度中心_第6张图片

xxl.job.admin.addresses=http://127.0.0.1:8080/job

### xxl-job executor address
xxl.job.executor.appname=myapp
xxl.job.executor.ip=
xxl.job.executor.port=9999

### xxl-job, access token
xxl.job.accessToken=

### xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=-1

编写配置类:

package com.hawk.yoga.common.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * xxl-job config
 *
 * @author xuxueli 2017-04-28
 */
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.executor.appname}")
    private String appName;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean(initMethod = "start", destroyMethod = "destroy")
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppName(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          
     *             org.springframework.cloud
     *             spring-cloud-commons
     *             ${version}
     *         
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */


}

编写自己的定时任务,我做一个统计user的定时任务:

1、继承IJobHandler接口
2、添加注解:
@Component
@JobHandler(value = “yogaHandler”)
(value值非常重要,新建任务需要指定名字 ,和value值一样)

XxlJobLogger.log(this.getClass().getSimpleName() + “–start”);是向后台管理端输送日志。

package com.hawk.yoga.job;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.Serializable;

/**
 * @Author: 
 * @Description:
 * @Date: Create in  2019/7/15
 */
@Component
@JobHandler(value = "yogaHandler")
@Slf4j
public class UserJob extends IJobHandler implements Serializable {
    @Override
    public ReturnT execute(String s){
        log.info("统计user开始》》》》》》》》");
        
        XxlJobLogger.log(this.getClass().getSimpleName() + "--start");
        
        return ReturnT.SUCCESS;
    }
}

Springboot项目整合xxl -job 任务调度中心_第7张图片

第四步 运行自己项目 ,配置任务

项目启动成功后,配置执行器,新建任务:

1、后台端页面配置执行器:注意:appname和配置保持一直
Springboot项目整合xxl -job 任务调度中心_第8张图片

2、新建任务,并启动:注意jobHandler需要和注解value值保持一直
Springboot项目整合xxl -job 任务调度中心_第9张图片
然后启动任务,我们去后台看看任务有没有运行:

Springboot项目整合xxl -job 任务调度中心_第10张图片
可以看见任务已经启动,并且安装cron表达式执行。

谢谢你的阅读,后续我会基于此版本二次开发,望关注。

你可能感兴趣的:(定时任务,分布式)