官方文档:https://www.xuxueli.com/xxl-job/

XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

说明:官方文档很重要,而且非常详细,要慢慢适应看官方文档进行学习!

PS:下面搭建和整合流程是基于项目需求进行整理的,和普通学习流程一致,就是有一些命名没那么测试化,自行体会。

xxl-job 环境搭建

1. 下载

下载地址:https://github.com/xuxueli/xxl-job/releases

建议:直接下载最新版,如目前我下的是 2.4.0,之前的 2.3.0 用的有问题。

说明:下载解压后,使用 IDEA 打开。

2. 数据库表导入

SQL 位置:doc/db/tables_xxl_job.sql

说明:导入到自己的数据库中。

3. 修改配置数据

说明:以下两个配置必须修改,否则启动报错!

3.1 修改 application.properties

配置文件位置:xxl-job-admin 下的 src/main/resources/application.properties

server.port=7397 #【自选】,修改后,后面自己执行器项目配置中需要对应换改的这个端口

# 数据源配置信息,对应改成自己的。
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=luis
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 【重要!说明:此 accessToken xxl-job 配置了默认的,你自己的执行器项目中 accessToken 必须保持一致】
xxl.job.accessToken=default_token
3.2 修改 logback.xml

日志配置文件位置:xxl-job-admin 下的 src/main/resources/logback.xml

<!-- 日志文件保存位置改成自己的,可按如下示例放到项目根目录下 -->
<property name="log.path" value="D:/1a-Projects/lw-projects/tool-projects/xxl-job-2.3.0/data/applogs/xxl-job/xxl-job-admin.log"/>

4. 运行访问

运行 xxl-job-admin 下的主启动类启动项目,浏览器输入地址访问:http://localhost:7397/xxl-job-admin/toLogin

PS:若是免登陆的,则忽略下面账号密码。

默认登陆账号:admin

默认登陆密码:123456

5. 其他

这里简单说明下,xxl-job-executor-samples 下有两个示例执行器模板项目,有多种任务使用方式,后续可自行参考模板项目以及官方文档,进行学习使用,下面直接介绍 Spring Boot 中简单使用 XXL-JOB。

Spring Boot 整合 XXL-JOB

新建 Spring Boot 项目,准备进行整合。

1. 添加 pom

<!-- xxl-job-core(建议根据下载的 xxl-job 自行适配版本)-->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>

2. 添加配置信息

几个核心配置:服务地址、应用名称、端口、日志路径

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

3. 添加配置类

@Configuration
public class LotteryXxlJobConfig { private Logger logger = LoggerFactory.getLogger(LotteryXxlJobConfig.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();
**********************************************************************************************/ }

4. 添加任务类

@Component
public class LotteryXxlJob { private Logger logger = LoggerFactory.getLogger(LotteryXxlJob.class); // 简单任务
@XxlJob("lotteryActivityStateJobHandler")
public void lotteryActivityStateJobHandler() throws Exception { logger.info("我是被 xxl-job 自动调用执行的任务!"); } }

5. 启动项目

PS:必须保证 xxl-job 项目先正常启动,并且任务调度中心可访问。此项目必须后启动!

6. 任务调度中心配置任务

说明:必须先创建执行器,再创建任务!

6.1 新增执行器

访问任务调度中心:http://localhost:7397/xxl-job-admin/

进入执行器管理,新增执行器,填写信息:

  • AppName :填自己 Spring Boot 项目中配置的 appname,如上面项目的 lottery-job
  • 名称:随便写,即执行器名
  • 注册方式:选自动注入

然后保存即可!

6.2 新增任务

进入任务管理,新增任务,填写信息:

  • 执行器:选择上步中填写的执行器名称
  • 任务描述:自行描述
  • 负责人:xxx
  • 调度类型:CRON
  • CRON 表达式:自行定制,如 0/1 * * * * ?,表示每秒执行一次

然后保存即可!(其中有些配置可自行设置)

7. 任务操作

在任务管理下,可对新增的任务进行操作,如启动、执行一次等

点击启动或执行一次后,可观察 Spring Boot 项目后台任务的日志打印情况,测试验证。

以上,整合完成。

Spring Boot 整合 xxl-job的更多相关文章

  1. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  2. spring boot整合jsp的那些坑(spring boot 学习笔记之三)

    Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>or ...

  3. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

  4. Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  5. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  6. spring boot整合Hadoop

    最近需要用spring boot + mybatis整合hadoop,其中也有碰到一些坑,记录下来方便后面的人少走些弯路. 背景呢是因为需要在 web 中上传文件到 hdfs ,所以需要在spring ...

  7. Spring Boot整合Elasticsearch

    Spring Boot整合Elasticsearch   Elasticsearch是一个全文搜索引擎,专门用于处理大型数据集.根据描述,自然而然使用它来存储和搜索应用程序日志.与Logstash和K ...

  8. spring boot 整合 百度ueditor富文本

    百度的富文本没有提供Java版本的,只给提供了jsp版本,但是呢spring boot 如果是使用内置tomcat启动的话整合jsp是非常困难得,今天小编给大家带来spring boot整合百度富文本 ...

  9. spring boot 整合quartz ,job不能注入的问题

    在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...

  10. spring boot整合servlet、filter、Listener等组件方式

    创建一个maven项目,然后此项目继承一个父项目:org.springframework.boot 1.创建一个maven项目: 2.点击next后配置父项目及版本号 3.点击finish后就可查看p ...

随机推荐

  1. Linux系统管理实战-DNS

    DNS 域名解析 DNS(domain name system) 解析方式 1.本地解析 /etc/hosts 127.0.0.1 localhost localhost.localdomain lo ...

  2. C# NAudio 检测声音

    using NAudio.Wave;using System;using System.Collections.Generic; namespace WinFromBaidu{ class NAudi ...

  3. input类型为number仍可以输入e,+,-解决方法

    <input type="number" onKeypress="return(/[\d\.]/.test(String.fromCharCode(event.ke ...

  4. new一个实例的原理及过程

    前提,要明白new出来的实例是什么,包含了哪些内容? 请看一下举例代码↓↓↓↓ function Person(name,age){ this.name = name; this.age = age; ...

  5. 9.29 2020 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令

    一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调 ...

  6. C语言中字符数组的赋值和复制

    /*C中,字符串,即字符数组的赋值与字符变量.常量.变量的赋值是不同的.初学者总会犯错误. 常见错误如下: 1.定义的时候直接用字符串赋值 char a[10]; char a[10]="h ...

  7. C# 循环给多个连续编号的控件赋值

    C# 循环给多个连续编号的控件赋值 我们经常在 winform 界面上用很多文本框用来显示一组数据,文本框前面有Label标识.我们得到的数据也经常是一个list 或者数组的形式的.需要给这些文本框赋 ...

  8. mysql中数据库的并发事务问题

    1.脏读(dirty-read):如果第二个事务查询到第一个事务还未提交的更新数据,就会形成脏读. 2.幻读/虚读(phantom read):一个事务执行两次,如果出现第二次事务执行比第一次多一些或 ...

  9. Java学习笔记-封装Java Util包Base64方法

    懒人菜鸟入门Java系列-习惯性封装常用方法,方便开发过程中调用   注释: Java版本-1.8 1 * @Author wuwenchao 2 * @Version 1.0.0 3 * @Date ...

  10. PYinstall打包程序出现编码错误的解决 'utf-8' codec can't decode byte 0xce in position 171: invalid continuation b

    网上说,先执行,再打包 chcp 65001 试过没有用. 解决方案: 把import的包批量注释,然后寻找是import那个文件导致. 虽然注释会导致程序运行出错,但是打包才不管你能不能运行. 最后 ...