为啥要选择xxl-job?

因为原生的Spring-Task集成执行器模块、调度模块,两者是绑定死的。如果我们想去修改调度时间或修改执行器逻辑,就需要重新运行项目,非常局限。于是就诞生了XXL-Job分布式、轻量级、易拓展、具有可视化Dashboard的定时任务。

xxl-job官网

官网:https://www.xuxueli.com/xxl-job/

Github地址:https://github.com/xuxueli/xxl-job/

Gitee地址:https://gitee.com/xuxueli0323/xxl-job/

xxl-job项目介绍

我们使用xxl-job的时候,是需要启动两个角色:一个是调用中心,另一个是执行器。

去Github下载发布包,解压分为3个包:

  1. xxl-job-admin:调度中心
  2. xxl-job-core:公共依赖
  3. xxl-job-executor:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)

原理:将调度模块与任务模块解耦,通过调度模块去调用任务模块,提高了系统高可用与稳定性。

常见的执行器有:

xxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用,推荐这种方式;

xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器;

xxl-job-executor-sample-jfinal:JFinal版本,通过JFinal管理执行器;

xxl-job-executor-sample-nutz:Nutz版本,通过Nutz管理执行器;

官方Demo - 启动调度中心admin步骤

1、将项目导入Idea,将解压的文件/doc/db文件夹下的sql文件导入到mysql中

2、修改admin项目的 mysql配置信息

3、修改logback.xml 日志path配置,因为windows是没有此文件夹,添加.变为相对路径。

<property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/>
修改为
<property name="log.path" value="./data/applogs/xxl-job/xxl-job-admin.log"/>

4、启动项目

访问:http://127.0.0.1:8080/xxl-job-admin/。 账号:admin 密码:123456

以后我们就在这里修改任务调度

官方Demo - 启动执行器步骤

1、修改配置文件application.properties的 日志文件路径

xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
修改为
xxl.job.executor.logpath=./data/applogs/xxl-job/jobhandler

2、修改logback.xml中的 日志路径

<property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/>
修改为
<property name="log.path" value="./data/applogs/xxl-job/xxl-job-admin.log"/>

3、直接启动项目即可

登录任务调度中心 - "执行器管理" 就能看到了。

项目集成xxl-job

添加xxl-job依赖

        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.3.1</version>
        </dependency>

向admin平台添加执行器

编写任务

编写配置文件

# xxl-job配置
### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=default_token
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=server001
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=127.0.0.1
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=8099
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=./data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30

编写代码

@Slf4j
@Component
public class DIYTask {

    private static Logger logger = LoggerFactory.getLogger(DIYTask.class);

    // 指定任务执行的前置、销毁方法 @XxlJob(value = "task001", init = "init", destroy = "destroy")
    @XxlJob("task001")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("我是xxl-job API输出的日志,这里可以在admin平台 - 调度日志 - 执行日志看到。");
        log.info("我是Slf4j输出的日志,只能在控制台看到。");
        TimeUnit.SECONDS.sleep(2);
        // default success
    }

    public void init() {
        logger.info("init");
    }

    public void destroy() {
        logger.info("destroy");
    }

}

admin平台添加任务

开启任务

查看调度日志

由上面案例我们就能发现,我们先编写好任务,但是任务默认不执行,我们在管理平台开启任务后,我们的任务才会执行!

特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤