本文档只针对项目中适用步骤说明以及分片广播策略适用说明,如需要了解框架原理及项目特性请参考xxl-job官方文档

一、使用步骤说明:

 

  1. 在maven项目中添加下面的依赖(<version>选择最新的稳定版本</version>)

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

2. 添加配置类

@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.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.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
}

 

   3.编写定时任务处理类

      • 继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;
      • 注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;
      • 注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。
      • 执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
/**
 * 任务Handler示例(Bean模式)
 *
 * 开发步骤:
 * 1、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;
 * 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;
 * 3、注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。
 * 4、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
 */
@JobHandler(value="myHandler")
@Component
public class MyJobHandler extends IJobHandler {

   @Override
   public ReturnT<String> execute(String param) throws Exception {
      XxlJobLogger.log("XXL-JOB, Hello World.");
      System.out.println("XXL-JOB, Hello World.");
      for (int i = 0; i < 5; i++) {
         XxlJobLogger.log("beat at:" + i);
         System.out.println("beat at:" + i);
         TimeUnit.SECONDS.sleep(2);
      }
      return SUCCESS;
   }

}

4. 添加xxl-job对应配置如下:

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

### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample

### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=

### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999

### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=

### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler

### 执行器日志保存天数 [选填] :值大于3时生效,启用执行器Log文件定期清理功能,否则不生效;
xxl.job.executor.logretentiondays=-1

5. 到管理页面添加执行器和任务

  1. 如果是新添加的系统服务应用,在执行器列表里找不到对应的appName时需点击添加新的执行器
  2.  

1.新增执行器

AppName:对应配置文件中xxl.job.executor.appname

执行器名称:自定义服务名称

执行器排列顺序:自定义执行器列表中的排列顺序

注册方式:

自动注册:无需在下方输入框填写机器地址

适用于对执行机器无特殊要求的场景

手动录入:需要在下方输入框填写机器地址

适用于对执行机器有要求的场景,如本地测试job时

  2. 添加任务

 

 

注:对应的路由策略作用跟阻塞处理策略根据实际适用场景选择

 

如下路由策略除了分片广播为并行策略,其他策略都是串行策略

并行策略作用:适用于有大量数据需要定时任务处理时使用

串行策略作用:适用于高可用部署业务系统分担定时任务压力时的路由策略,具体根据使用场景选择

 

阻塞处理策略:

  1. 发生场景:在前一轮定时任务未执行完成,且第二轮被发起时。
  2. 单机串行:下一轮定时任务线程会一直等到上一轮定时任务执行完后再执行
  3. 丢弃后续调度:第二轮发起的定时任务直接失败不执行
  4. 覆盖之前的调度:第一轮未执行完的定时任务,直接停止,执行新一轮定时任务
  5. 选择说明:视业务场景确定

分片广播策略使用说明:

1.分片是以当前执行器注册机器为粒度分片的,当直接使用定时任务管理平台做分片处理时,需要执行任务的服务做高可用部署,最少需要两个服务节点部署,如果系统节点不能满足该情况,使用分片广播的策略跟串行策略没有区别。

2.如果系统为单机部署需要使用分片处理定时任务,来缩短定时任务执行时间时,可以将同一个handler添加到多个执行任务中,使用参数做分片参数传入。

 

 

GitHub 加速计划 / xx / xxl-job
27.16 K
10.79 K
下载
xxl-job: 是一个分布式任务调度平台,核心设计目标是开发迅速、学习简单、轻量级、易扩展。
最近提交(Master分支:3 个月前 )
e5d26ba2 - 4 个月前
977ad87b - 4 个月前
Logo

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

更多推荐