前言

个人博客:www.wdcdbd.com

 在Java中使用定时任务是一件很常见的事情,比如使用定时任务在什么时间什么时候,去发布一些信息,或者去查询一些日志等相关的代码。这时,我们就要开发定时任务这中功能来实现此案例。而Java常见的定时任务一般有6种,JDK自带Timer实现,Quartz框架集成实现spring自带的Spring Task等  剩下的就不说了,具体想要了解可以去百度搜索,而今天要讲的是Java定时任务神器: xxl-Job——轻量级分布式任务调度平台。

XXl-Job 

 开源xxl-job: https://gitee.com/xuxueli0323/xxl-job

XXL-JOB是一个轻量级分布式任务调度平台。特点是平台化,易部署,开发迅速、学习简单、轻量级、易扩展。由调度中心和执行器功能完成定时任务的执行。调度中心负责统一调度,执行器负责接收调度并执行。

因为此文章是针对小白来讲述的,所以会使用大量的图片和代码,以便讲的更加详细易懂,所以会有很多小废话。话不多说,直接上代码讲解。

一、Gitee下载开源框架XXl-job

1、拉取xxl-job代码

首先去上述的gitee拉取开源的xxl-job代码,千万不要选择master分支,要选择稳定的版本,这里我选择2.2.0来做演示。

去自己的idea中拉取gitee

 拉取好之后,就是下述图片的样式,其中最主要的内容就是admin,等到最后,我会单独讲解xxl-job框架中所有的相关内容都是什么意思。现在先按照步骤做即可

二、在使用xxl-job时所以要了解的知识(重要)

1、所要了解的知识

xxl-job共分为3大部分:任务调度器平台、任务执行器、任务处理器(jobHandler)、

任务调度器平台: 就是上述拉取下来的代码中的xxl-job-admin项目,这个项目就是任务调度平台。我们只需要配置一下就可以有自己的一个平台环境。而这个人任务调度器平台我们就可以理解为eureka(注册中心)

任务执行器执行任务处理器

任务处理器(jobHandler):通过自己在项目中自定义不同的任务处理器来让任务执行器执行,并通过调度器平台 处理不同的任务。

现在看不懂没事,等后续搭建起来之后,你就会全部理解。 

三、搭建任务调度器平台 

1、任务调度器平台

1.1、创建xxl-job-admin数据库

将这个.sql文件创建到你的数据库中,这个应该都会创建,数据库名字要为xxl_job防止不必要的错误。其实里边已经帮你写好了,这里我就以Navicat为例引入.sql文件

将.sql复制粘贴到桌面,然后通过Navicat引入即可。

1.2、配置yaml

首先去xxl-job-admin找到配置文件,并修改portmysqlmailxxl.job.accessToken

修改port

修改mysql

修改mail

邮箱的账号密码不知道的去百度搜索:java配置mail 

修改 xxl.job.accessToken

这个accessToken可以理解为秘钥,后面会在你自己的项目中配置和他名字一模一样的秘钥,让你的项目与任务调度器平台互相关联起来。

这里我就不做修改了,使用默认的,可以自定义。

1.3、配置logback.xml

路径可以自定义,我就放到我习惯的位置,你也可以放到你自己习惯的位置

在linux中先创建好自己的路径日志,然后赋权限,下面的命令,是给文件赋权限的

chmod -R 777 /home/dblog/xxl-job/xxl-job-admin.log

 1.4、启动任务调度器

配置好之后,用idea打包,并将jar在linux中运行。

1.4.1、修改jar名称

 我将xxl-job-admin-2.4.1-SNAPSHOT放到自己习惯的位置并修改了名称(个人习惯),不修改也可以。

#将jar通过后台进程启动,并将启动信息指向xxl-job-admin.log中  

nohup java -jar xxl-job-admin.jar > xxl-job-admin.log 2>&1 &

#查看日志

tail -f xxl-job-admin.log

 1.5、访问任务调度器
访问地址:http://自己的ip:自己设置的端口号/xxl-job-admin    

账号:admin  ;密码:123456

 好的!以上就是搭建好的xxl-job的调度器平台了,现在我们只需要在自己的项目中引入xxl-job依赖,然后配置一些东西,就可以在这个任务调度器平台来操作定时任务啦!!!

四、sprintboot引入xxl-job

1、引入xxl-job-core依赖

在自己的项目中引入xxl-job-core依赖;只需引入这一个依赖就行

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

 2、配置yaml

在自己的项目中配置yaml

xxl:
  job:
    admin:
      # 调度中心服务部署的地址
      addresses: http://192.168.139.110:9000/xxl-job-admin
    # 执行器通讯TOKEN,要和调度中心服务部署配置的accessToken一致,要不然无法连接注册
    accessToken: default_token
    executor:
      # 执行器AppName
      appname: job-demo
      # 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
      address:
      ip: 192.168.139.110
      #执行器端口号:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
      port: 9999
      # 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath: /home/dblog/log/jobhandler
      # 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
      logretentiondays: 30

注意!!!!: logpath执行日志存储位置,也是需要自己在linux中创建的,和上述任务调度器平台创建一样,创建完成之后,设置权限。 

3、配置日志 

去你拉取的xxl-job项目中找到 logback.xml,复制到你自己项目的位置

复制到自己的项目中

3.1、修改日志路径

在linux创建,并且给权限,这个就偷下懒不写了,在任务调度平台中已经写过了,可以模仿写一下。

4、编写配置类

原封不动复制粘贴到你项目的位置就行即可,我一般习惯放到config下。这个配置类其实是可以在xxl-job项目中找到的。

@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @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;

    @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;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "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();
     */


}

xxl-job项目中的XxlJobConfig

上述的配置类代码,其实就是这个xxl-job项目中的XxlJobConfig  一模一样。 

 

 5、创建任务处理器类

将xxl-job中的SampleXxlJob复制到自己的项目中

 5.1、修改并编写代码

全部配置好之后,将自己的项目打包并部署到linux中,可以看到我的项目已经起来了。

接下来,就要去操作任务调度器平台了,来设置定时任务。

五、操作任务调度器平台(任务调度中心)

1、新增执行器

注意:自动注册,xxl-job会自动找到你的机器地址。

也就是你上述在自己项目中配置的执行器ip和端口号,如果你的机器地址为无,那么就手动注册。

2、新增任务处理器

JobHandler来源  

自己项目代码中自定义的名称。

 3、启动任务处理器

启动完成之后,你可以去linux,查看你刚才打印的信息,如果出现则代表成功。

还可以看调度日志

好啦!!以上就是xxl-job的使用啦,哇,深夜2点爆肝的,呜呜呜。希望各位看完之后,能够快速提升自己的实力吧。加油!

附加-运行模式:

BEAN模式

Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。

优点:每个任务只需要一个方法,添加@XxlJob注解即可,方便、快速。

缺点:需要Spring环境

GLUE模式(Java)

GLUE模式(Java)
任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。开发流程如下:

步骤一:调度中心,新建调度任务:
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 “GLUE模式(Java)”;

步骤二:开发任务代码:
选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴到编辑中)。

 其他模式:略

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐