1.9.2版本用的是 war  必须要tomcat启动。  2.3.0  的是jar包。可以直接用java启动 

xxl-job文档地址  分布式任务调度平台XXL-JOB (xuxueli.com)

一、初识xxl-job

我自己的理解,是我们自己写的逻辑代码,需要定期的去执行,然后在这个背景下,我们会使用到我们的任务调度,在此我使用的是xxl-job任务调度。

二、概述

xxl-job是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

三、下载

源码仓库地址(一个是githup,另外一个是码云,任何一个下载都行)

源码仓库地址    Release Download
xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB) (github.com)

四、操作步骤   2.3.0  只有8张表     1.9.2 是16张表

1.先在我们的本地数据库建立8张表,如果未建表,程序启动会报错,具体的建表语句是在我们项目这个位置:

/xxl-job/doc/db/tables_xxl_job.sql,然后执行sql脚本就行了,会在库中生成8张表。
表如下:

2.修改xxl-job项目下的application.properties文件中的一些基本信息:

2.1.换成自己的数据库

2.2.换成自己的邮箱以及密码(根据他官网这么修改的)

五、启动调度中心项目(xxl-job-admin)

如果已经正确进行上述配置,可将项目编译打包部署。 调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址),登录后运行界面如

六、 配置执行器项目(xxl-job-executor-sample-spring这个项目)

1.作用:负责接收"调度中心"的调度并执行,可直接部署执行器,也可以将执行器集成到现有业务项目中。

2.maven依赖

确认pom文件中引入了 "xxl-job-core" 的maven依赖;

3.执行器配置

执行器配置,配置文件地址:

xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin      admin的地址
xxl.job.executor.appname=xxl-job-executor-sample             执行器的名称
xxl.job.executor.port=9999                                                    执行器的端口 

  

xxl-job-executor-samples\xxl-job-executor-sample-springboot  下面有一个配置文件
执行器配置,配置内容说明:

### xxl-job admin address list:调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"。
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

### xxl-job executor address:执行器"AppName"和地址信息配置:AppName执行器心跳注册分组依据;地址信息用于"调度中心请求并触发任务"和"执行器注册"。执行器默认端口为9999,执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用。单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.port=9999

### xxl-job, access token:执行器通讯TOKEN,非空时启用
xxl.job.accessToken=
### xxl-job log path:执行器运行日志文件存储的磁盘位置,需要对该路径拥有读写权限
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler/

### xxl-job log retention days:执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持3天,否则功能不生效;
xxl.job.executor.logretentiondays=-1


七:1、本地项目引入  pom文件

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

2、application.properties

 配置这三项就行,

xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin      admin的地址
xxl.job.executor.appname=xxl-job-executor-sample             执行器的名称
xxl.job.executor.port=9999                                                    执行器的端口 

下面的作为参考, 可以直接上官网看


#spring.main.web-environment=false

# log config
logging.config=classpath:logback.xml


### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

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

### xxl-job executor appname
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

3、配置执行器

package com.scm.platform.entrance.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.Getter;
import lombok.Setter;
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
@Getter
@Setter
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

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

    private String accessToken;

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

    private String address;

    private String ip;

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

    private String logPath;

    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info("xxl-job 2.3.0 >>>>>>>>>>> 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;
    }

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


}

4、新建测试类

@Slf4j
@Component
public class EntranceJobHandler {

    @XxlJob("demoJobHandler")
    public void demoJobHandler(String s) throws Exception {
        log.info(s);
        log.info("2.3.0---> xxl-job------->");
        // default success
    }

}

心得:如果是新搭建的框架的话,应该很快就可以成功了,参照我这个和官网,我个人搭建框架是遇到过几个坑的,框架以前用的是1.9.2的版本,遇到各种问题,下面是几个坑

1、xxl-job 每隔几秒报错   No classes defined at reference '62' 64 等应该都是admin和execute执行器版本不一致导致的
2021-07-07 19:38:05.179 ERROR [sf-trading-server,,,] 27328 --- [p1291149645-509] c.x.j.c.r.n.j.server.JettyServerHandler  : No classes defined at reference '62'
java.lang.IllegalStateException: No classes defined at reference '62'
    at com.xxl.job.core.rpc.serialize.HessianSerializer.deserialize(HessianSerializer.java:47)
    at com.xxl.job.core.rpc.netcom.jetty.server.JettyServerHandler.doInvoke(JettyServerHandler.java:54)
    at com.xxl.job.core.rpc.netcom.jetty.server.JettyServerHandler.handle(JettyServerHandler.java:30)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at org.eclipse.jetty.server.Server.handle(Server.java:500)
    at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
    at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.caucho.hessian.io.HessianProtocolException: No classes defined at reference '62'
    at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2943)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2135)
    at com.caucho.hessian.io.CollectionDeserializer.readLengthList(CollectionDeserializer.java:93)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2105)
    at com.xxl.job.core.rpc.serialize.HessianSerializer.deserialize(HessianSerializer.java:44)
    ... 20 common frames omitted

2、xxl-job配置报错
address:192.168.0.117:19998 code:500 msg:xxl-rpc remoting error(no protocol: 192.168.0.117:19998/run), for url : 192.168.0.117:19998/run
no protocol :没有协议,在节点环境查看 http://192.168.0.117:19998/  是否有http协议
配置执行器的时候记得带http://

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐