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

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

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

配置部署“调度中心"
调度中心配置文件地址:
/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties
我们只需要将数据库连接配置修改成自己的环境:

部署项目
正确进行上述配置后,我们可将项目编译打war包部署到tomcat中。调度中心访问地址:http://localhost:8080/xxl-job-admin (默认8080端口,该地址执行器将会使用到,作为回调地址)
我使用的是IDEA中Smart Tomcat部署的项目:

部署成功的话,你可以看到如下界面:

使用管理系统,在“任务管理"中,新建一个定时任务,填写好相关的配置信息

使用管理系统,在“执行器管理”中配置一个执行器,也就是我们的项目中需要用到的

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

1.项目加入maven依赖

<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>1.9.1</version>
</dependency>

  

2.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;
}
}

  

3.定时任务设置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<String> 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;
} }

  

4.项目中配置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分布式定时任务框架结合到一个spring boot 项目中,后面还会深入学习此分布式定时任务框架的其他知识,将此分布式定时任务框架与其他框架进行对比学习。

【xxl-job】轻松实现分布式定时任务demo实例的更多相关文章

  1. 【redis】分布式锁实现,与分布式定时任务

    如果你还不知道redis的基本命令与基本使用方法,请看 [redis]redis基础命令学习集合 写在前面 redis辣么多数据结构,这么多命令,具体一点,都可以应用在什么场景呢?用来解决什么具体的问 ...

  2. 基于spring+quartz的分布式定时任务框架

    问题背景 我公司是一个快速发展的创业公司,目前有200人,主要业务是旅游和酒店相关的,应用迭代更新周期比较快,因此,开发人员花费了更多的时间去更=跟上迭代的步伐,而缺乏了对整个系统的把控 没有集群之前 ...

  3. lesson9:分布式定时任务

    在实际的开发过程中,我们一定会遇到服务自有的定时任务,又因为现在的服务都是分布式的,但是对于定时任务,很多的业务场景下,还是只希望单台服务来执行,网上有很多分布式定时任务的框架,各位如感兴趣,可以自行 ...

  4. Elastic-Job - 分布式定时任务框架

    Elastic-Job - 分布式定时任务框架 摘要 Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.去掉了和dd-job中的监控和ddframe接入规范 ...

  5. 3分钟掌握Quartz.net分布式定时任务的姿势

    引言 长话短说,今天聊一聊分布式定时任务,我的流水账笔记: ASP.NET Core+Quartz.Net实现web定时任务 AspNetCore结合Redis实践消息队列 细心朋友稍一分析,就知道还 ...

  6. springboot整合xxl-job分布式定时任务【图文完整版】

    一.前言 定时任务有很多种,有一些大的框架也有一些简单的实现. 比如常见的: JDK的Timer和TimerTask Quartz异步任务调度框架 分布式定时任务XXL-JOB Spring Task ...

  7. 【java】之 apache commons-codec 与Apache Digest demo实例,支持md5 sha1 base64 hmac urlencode

    使用commons-codec 进行加密的一些操作 package com.jiepu.ApacheDigest; import java.io.FileInputStream; import org ...

  8. 分布式定时任务框架比较,spring batch, tbschedule jobserver

    分布式定时任务框架比较,spring batch, tbschedule jobserver | 移动开发参考书 分布式定时任务框架比较,spring batch, tbschedule jobser ...

  9. 分布式定时任务 -- elastic-job

    一.前言 在我们的项目当中,使用定时任务是避免不了的,我们在部署定时任务时,通常只部署一台机器.部署多台机器时,同一个任务会执行多次.比如短信提醒,每天定时的给用户下发短信,如果部署了多台,同一个用户 ...

随机推荐

  1. swift计算 switch case

    var year = var month = var day = ; let daysOfFeb = year % == && year% != || year % == ?: var ...

  2. SAX解析XML文档——(二)

    SAX从上向下解析,一行一行解析.节省内存,不适合CRUD. XML文档: <?xml version="1.0" encoding="UTF-8"?&g ...

  3. XML解析技术简介——(一)

  4. mac 报错Root chmod operation not permitted on file

    系统:mac os 10.14.1 重启电脑 mac用户在升级系统之后,电脑启用了SIP(System Integrity Protection),增加了rootless机制,导致即使在root权限下 ...

  5. jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法

    一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...

  6. 在Asp.Net Core中使用中间件保护非公开文件

    在企业开发中,我们经常会遇到由用户上传文件的场景,比如某OA系统中,由用户填写某表单并上传身份证,由身份管理员审查,超级管理员可以查看. 就这样一个场景,用户上传的文件只能有三种人看得见(能够访问) ...

  7. 64位Win7系统WMware安装Mac OS

    1.         准备工作 l  VMWare Workstation,我的版本是 l  MAC OS安装光盘镜像文件,种子地址 http://www.kuaipan.cn/file/id_611 ...

  8. 面向对象特征:封装、多态 以及 @propetry装饰器

    (继承补充)组合 obj=fun()#对象 obj.attr=foo()#对象的属性等于另一个对象 什么是组合:     A类的对象具备某一个属性,该属性的值是B类的对象   基于这种方式就把A类与B ...

  9. Linux下进程/程序网络带宽占用情况查看工具 -- NetHogs

    http://www.vpser.net/manage/nethogs.html   来自.  最后略有修改 之前VPS侦探曾经介绍过流量带宽相关的工具如:iftop.vnstat,这几个都是统计和监 ...

  10. 卓越的目标检测器Pelee

    Densenet的改良—PeleeNET Pelee: A Real-Time Object Detection System on Mobile Devices 论文地址:https://arxiv ...