分布式任务调度平台XXL-JOB

介绍

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

xxl-job-admin部署

github源码地址:

https://github.com/xuxueli/xxl-job

xxl-job分为服务端和客户端两个,xxl-job-admin为服务端和管理界面。

执行sql脚本

把xxl-job\doc\db下的tables_xxl_job.sql导入到mysql数据库。

启动xxl-job-admin

http://localhost:8080/xxl-job-admin/

xxl-job定时任务

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

application.properties配置

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

 

定时任务配置

@Configuration
public class XxJobConfig {

    private final static Logger logger = LoggerFactory.getLogger(XxJobConfig.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
    public XxlJobSpringExecutor xxlJobSpringExecutor(){
        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;
    }
}

 编写个人定时任务

@Component
@Slf4j
public class MyDemoJobHandler {

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

    @XxlJob("demoJobHandler")
    public ReturnT<String> demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
        for (int i = 0; i < 5; i++) {
            logger.info("this is >>>>>>>>>>> " + i);
            TimeUnit.SECONDS.sleep(2);
        }
        return ReturnT.SUCCESS;
    }

}

 

定时任务每分钟执行一次 

[2021-12-18 20:35:00,015] [Thread-30] [INFO] -  c.m.s.x.MyDemoJobHandler 31 this is >>>>>>>>>>> 0 
[2021-12-18 20:35:02,017] [Thread-30] [INFO] -  c.m.s.x.MyDemoJobHandler 31 this is >>>>>>>>>>> 1 
[2021-12-18 20:35:04,020] [Thread-30] [INFO] -  c.m.s.x.MyDemoJobHandler 31 this is >>>>>>>>>>> 2 
[2021-12-18 20:35:06,020] [Thread-30] [INFO] -  c.m.s.x.MyDemoJobHandler 31 this is >>>>>>>>>>> 3 
[2021-12-18 20:35:08,025] [Thread-30] [INFO] -  c.m.s.x.MyDemoJobHandler 31 this is >>>>>>>>>>> 4 

  

 

posted on 2021-12-18 17:21  rabbit-xf  阅读(167)  评论(0)    收藏  举报