【xxl-job】轻松实现分布式定时任务demo实例

【项目描述】

前段时间专门独立了一个spring boot服务,用于做和第三方erp系统的对接工作。此服务的第一个需求工作就是可以通过不同的规则,设置不同的定时任务,从而获取erp系统的商品数据。所以,系统架构采用了xxl-job实现分布式定时任务。

【学习背景】

此项目不是我负责的,在上个月同事让我帮忙处理一个问题,便带给了我学习的机会,这个框架已经在线上环境使用,但框架也不是我参与搭建的,所以还是找到官方文档和项目实例,积累下技术与项目经验。本篇博客是一个简单的demo实例,主要总结下如何将此框架与我们的项目结合。

【实例搭建】
  1. 初始化“调度数据库”
    下载项目源码,获取“调度数据库初始化SQL脚本”,正常情况下生成16张表。
    sql脚本位置: /xxl-job/doc/db/tables_xxl_job.sql
    项目源码地址:https://github.com/xuxueli/xxl-job
    在IDEA中,我们可以直接选择通过github地址新建项目:
    【xxl-job】轻松实现分布式定时任务demo实例_第1张图片

  2. 配置部署“调度中心"
    调度中心配置文件地址:
    /xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties
    我们只需要将数据库连接配置修改成自己的环境:
    【xxl-job】轻松实现分布式定时任务demo实例_第2张图片

  3. 部署项目
    正确进行上述配置后,我们可将项目编译打war包部署到tomcat中。调度中心访问地址:http://localhost:8080/xxl-job-admin (默认8080端口,该地址执行器将会使用到,作为回调地址)
    我使用的是IDEA中Smart Tomcat部署的项目:
    【xxl-job】轻松实现分布式定时任务demo实例_第3张图片
    部署成功的话,你可以看到如下界面:
    【xxl-job】轻松实现分布式定时任务demo实例_第4张图片

  4. 使用管理系统,在“任务管理"中,新建一个定时任务,填写好相关的配置信息
    【xxl-job】轻松实现分布式定时任务demo实例_第5张图片

  5. 使用管理系统,在“执行器管理”中配置一个执行器,也就是我们的项目中需要用到的
    【xxl-job】轻松实现分布式定时任务demo实例_第6张图片

至此,调度中心的部署和配置工作结束了。下面是将此配置与我们的项目结合。只是一个demo实例,我就新建了一个spring boot框架项目,加入xxl-job框架搭建步骤如下:

  1. 项目加入maven依赖

		
			com.xuxueli
			xxl-job-core
			1.9.1
		
  1. xxlJobConfig配置类
@Slf4j
@Configuration
//扫描定时任务设置包路径
@ComponentScan(basePackages = "com.uqiauto.springbootxxljob.job")
public class XxlJobConfig {

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

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

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

    @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(initMethod = "start", destroyMethod = "destroy")
    public XxlJobExecutor xxlJobExecutor() {
        log.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
        xxlJobExecutor.setAdminAddresses(adminAddresses);
        xxlJobExecutor.setAppName(appName);
        xxlJobExecutor.setIp(ip);
        xxlJobExecutor.setPort(port);
        xxlJobExecutor.setAccessToken(accessToken);
        xxlJobExecutor.setLogPath(logPath);
        xxlJobExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobExecutor;
    }

    public String getAdminAddresses() {
        return adminAddresses;
    }

    public String getAppName() {
        return appName;
    }

    public String getIp() {
        return ip;
    }

    public int getPort() {
        return port;
    }

    public String getAccessToken() {
        return accessToken;
    }

    public String getLogPath() {
        return logPath;
    }

    public int getLogRetentionDays() {
        return logRetentionDays;
    }

    public String getAlarmEmail() {
        return alarmEmail;
    }
}

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

	@Override
	public ReturnT execute(String param) throws Exception {
		XxlJobLogger.log("XXL-JOB, Hello World.");

		for (int i = 0; i < 5; i++) {
			XxlJobLogger.log("beat at:" + i);
			TimeUnit.SECONDS.sleep(2);
		}

		return SUCCESS;
	}

}
  1. 项目中配置xxl-job框架需要用到的信息
xxl.job:
  admin.address: http://localhost:8088/xxl-job-admin/
  accessToken:
  alarmEmail: 18333617859@163.com
  executor:
    appname: xxl-job-executor-sample
    ip:
    port: 9999
    logpath: /data/applogs/xxl-job/jobhandler
#执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持3天,否则功能不生效;
    logretentiondays: -1

至此,整个搭建步骤就完成了。我设置的定时任务是每小时执行一次,同时也支持我们在管理系统页面去手动执行,最终我们可以通过管理系统去查看到定时任务执行的相关日志信息:
【xxl-job】轻松实现分布式定时任务demo实例_第7张图片

每条日志的详细信息:
【xxl-job】轻松实现分布式定时任务demo实例_第8张图片

【学习总结】

本篇博客只是一个简单的教程,将xxl-job分布式定时任务框架结合到一个spring boot 项目中,后面还会深入学习此分布式定时任务框架的其他知识,将此分布式定时任务框架与其他框架进行对比学习。

你可能感兴趣的:(#,UQI,#,分布式定时任务)