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

首先下载github源码:https://github.com/xuxueli/xxl-job

本文以2.2.0-SNAPSHOT开发测,如果需要下载对应版本:https://github.com/itwsj/xxl-job

代码目录结构:

将doc目录下的db文件夹中的数据库脚本在mysql数据库中执行,生成xxl相应的一些基础表。

修改xxl-job-admin下的application.properties文件,将数据库链接改成自己的数据库对应的url,最重要的是要指定服务端口以及上下文的名称

然后配置mysql链接和对应驱动,圈住的地方需要加上,要不然会报错时间区域和驱动链接错误

serverTimezone=UTC,com.mysql.cj.jdbc.Driver

然后启动项目,也可以将项目打包成jar文件。

访问后台管理页面

输入地址:localhost:8080/job 用户名:admin 密码 123456

在自己的springboot项目中,集成xxl-job:
在配置文件中加入以下配置:

(1)在pom.xml引入xxl-job的依赖

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

(2)在application.yml/application.properties中配置相关信息

1、配置后台管理端地址
2、appname值非常重要,配置执行器需要和这个保持一直

# web port
server.port=8081# log config
logging.config=classpath:logback.xml### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/job### xxl-job executor address
xxl.job.executor.appname=myapp
xxl.job.executor.ip=
xxl.job.executor.port=9999### xxl-job, access token
xxl.job.accessToken=### xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=30

编写配置类:

package com.xxl.job.executor.core.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** xxl-job config*/
@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.accessToken}")private String accessToken;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic 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.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();*/}

编写自己的定时任务

package com.xxl.job.executor.service.jobhandler;import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import com.xxl.job.core.util.ShardingUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.TimeUnit;/*** XxlJob开发示例(Bean模式)** 开发步骤:* 1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT<String> execute(String param)"* 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。* 3、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;** @author xuxueli 2019-12-11 21:52:51*/
@Component
public class SampleXxlJob {private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);/*** 1、简单任务示例(Bean模式)*/@XxlJob("demoJobHandler")public ReturnT<String> demoJobHandler(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 ReturnT.SUCCESS;}/*** 2、分片广播任务*/@XxlJob("shardingJobHandler")public ReturnT<String> shardingJobHandler(String param) throws Exception {// 分片参数ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();XxlJobLogger.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal());// 业务逻辑for (int i = 0; i < shardingVO.getTotal(); i++) {if (i == shardingVO.getIndex()) {XxlJobLogger.log("第 {} 片, 命中分片开始处理", i);} else {XxlJobLogger.log("第 {} 片, 忽略", i);}}return ReturnT.SUCCESS;}/*** 3、命令行任务*/@XxlJob("commandJobHandler")public ReturnT<String> commandJobHandler(String param) throws Exception {String command = param;int exitValue = -1;BufferedReader bufferedReader = null;try {// command processProcess process = Runtime.getRuntime().exec(command);BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream());bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream));// command logString line;while ((line = bufferedReader.readLine()) != null) {XxlJobLogger.log(line);}// command exitprocess.waitFor();exitValue = process.exitValue();} catch (Exception e) {XxlJobLogger.log(e);} finally {if (bufferedReader != null) {bufferedReader.close();}}if (exitValue == 0) {return IJobHandler.SUCCESS;} else {return new ReturnT<String>(IJobHandler.FAIL.getCode(), "command exit value("+exitValue+") is failed");}}/*** 4、跨平台Http任务*/@XxlJob("httpJobHandler")public ReturnT<String> httpJobHandler(String param) throws Exception {// requestHttpURLConnection connection = null;BufferedReader bufferedReader = null;try {// connectionURL realUrl = new URL(param);connection = (HttpURLConnection) realUrl.openConnection();// connection settingconnection.setRequestMethod("GET");connection.setDoOutput(true);connection.setDoInput(true);connection.setUseCaches(false);connection.setReadTimeout(5 * 1000);connection.setConnectTimeout(3 * 1000);connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8");// do connectionconnection.connect();//Map<String, List<String>> map = connection.getHeaderFields();// valid StatusCodeint statusCode = connection.getResponseCode();if (statusCode != 200) {throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid.");}// resultbufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));StringBuilder result = new StringBuilder();String line;while ((line = bufferedReader.readLine()) != null) {result.append(line);}String responseMsg = result.toString();XxlJobLogger.log(responseMsg);return ReturnT.SUCCESS;} catch (Exception e) {XxlJobLogger.log(e);return ReturnT.FAIL;} finally {try {if (bufferedReader != null) {bufferedReader.close();}if (connection != null) {connection.disconnect();}} catch (Exception e2) {XxlJobLogger.log(e2);}}}/*** 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑;*/@XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")public ReturnT<String> demoJobHandler2(String param) throws Exception {XxlJobLogger.log("XXL-JOB, Hello World.");return ReturnT.SUCCESS;}public void init(){logger.info("init");}public void destroy(){logger.info("destory");}}

运行自己项目 ,配置任务

项目启动成功后,配置执行器,新建任务:

1、后台端页面配置执行器:注意:appname和配置保持一致

2、新建任务,并启动:注意jobHandler需要和注解value值保持一致

然后启动任务:当出现如下证明启动成功:

证明jobHandler都注册成功。

然后再控制台点击启用,dubug查看

执行后查看控制台:并输出了结果,可以执行自己想要执行的任务了。

Springboot项目整合xxl -job相关推荐

  1. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  2. springboot项目整合mybatis

    SpringBoot项目整合mybatis 本章内容 使用 idea创建 SpringBoot项目 SpringBoot项目中配制 mybatis 框架 1 创建 SpringBoot项目 1.1 在 ...

  3. springboot项目整合阿里云oss的内容审核

    springboot项目整合阿里云 内容审核 第一 添加依赖 <dependency><groupId>com.aliyun</groupId><artifa ...

  4. Java springBoot项目整合海康威视摄像头抓拍车辆功能

    Java springBoot项目整合海康威视摄像头抓拍获取车辆信息功能 这篇文字写于去年的11月份,项目部署上去一段时间后,被反应有自动停止抓拍的BUG,我在代码中的解决办法是写了一个定时任务, 让 ...

  5. SpringBoot项目整合OpenFeign、实现动态IP+URL请求、自定义(编码器\解码器)

    SpringBoot项目整合OpenFeign 基础操作 pom依赖 配置application.yml 服务启动类 基础跨服务调用 动态IP+URL请求 + 动态编码器\解码器 自定义跨服务请求,E ...

  6. Nginx安装配置与SpringBoot项目整合

    本篇文章将在上篇<Redis安装与SpringBoot项目整合详细教程>(上文链接:https://blog.csdn.net/sp958831205/article/details/88 ...

  7. SpringBoot项目整合Retrofit最佳实践,这才是最优雅的HTTP客户端工具!

    作者:六点半起床 juejin.im/post/6854573211426750472 大家都知道okhttp是一款由square公司开源的java版本http客户端工具.实际上,square公司还开 ...

  8. spring-boot项目整合obs服务器-华为云

    目录 前言 1.购买服务并从官网获得我们项目所需的配置参数 1-1.登录华为云 1-2.进入控制台 1-3.创建桶 ​ ​1-4.获取sk.ak 2.spring-boot项目集成OBS服务器 2-1 ...

  9. RabbitMQ的6种工作模式的学习记录,普通MAVEN和springboot项目整合rabbitmq的API详解

    1.RabbitMQ后台管理页面 2.RabbitMQ 核心(自我理解) 3.RabbitMQ6种工作模式介绍 4. RabbitMQ的消息可靠性 5.RabbitMQ普通MAVEN项目使用 6.Sp ...

  10. springboot系列学习(十九):springboot项目整合Druid,Druid到底是什么,他是在项目中如何使用的

    目录 Druid是什么 先看一下之前的整合的jdbc使用的数据源是什么 创建一个springboot项目,导入Druid依赖 写一个Druid的配置类 yml文件和配置类绑定,这个之前就写过 解释以上 ...

最新文章

  1. 首款AI看球机器人亮相北京,已上线IOS版和安卓版
  2. 【IntelliJ IDEA】快捷键
  3. select下拉框下拉跳转代码
  4. 多域名下Mvc的Http缓存冲突的问题
  5. 前端学习(2852):简单秒杀系统学习之鼠标点击方法
  6. 2.Building Models from Convolutions
  7. Spring Cloud微服务之公共服务模块抽取(五)
  8. 热力图怎么做_LncRNA这么热,5分左右的LncRNA研究文章应该怎么做
  9. 【渝粤教育】国家开放大学2018年秋季 0248-21T电工电子技术 参考试题
  10. java开发工程师面试问题大全及答案大全
  11. 蓝兔子现在有一个字符串,如果一个字符串从左向右看和从右向左看是一样的,则称为回文串。请编写程序,帮助蓝兔子判断输入的字符串是否是回文串。
  12. 删除cortana_如何从Windows 10任务栏中删除Cortana
  13. matlab 添加子图图案,matplotlib给子图添加图例的方法
  14. 不同进制之间相互转换
  15. 小程序开发——页面背景色设置
  16. 全国计算机等级考试有java吗,请问全国计算机等级考试有没有二级Java?
  17. oracle cpu使用率高怎么排查解决,OracleCPU占用率较高的处理方法
  18. python设计拼图小游戏_关于python:教你用Python自制拼图小游戏轻松搞定熊孩子
  19. MyISAM 存储引擎(mysql 8.0)
  20. 35岁程序员,早到的中年危机

热门文章

  1. Fiddler出现“The system proxy was changed. Click to reenable capturing.”,代理排查
  2. vulnhub:Who Wants To Be King: 1
  3. Spring Boot @DeleteMapping(转)
  4. Vmware安装Ubuntu16.0.4出现Assuming drive cache: write through和1920X1080分辨率调节问题
  5. iOS逆向:【ARM 移位操作】(LSL、ASL、LSR、ASR、ROR、RRX)
  6. Android APK上架 应用宝 没有 固件版本 不显示
  7. 怎么免费注册微信小程序-微信小程序开发-视频教程1
  8. 《都挺好》一部黑码农的神剧!
  9. 以下不属于大气数据计算机系统的传感器是,下列不属于地理信息技术的是 A. 遥感     B.传感器     C. 全球定位系统   D. 地理信息系统——青夏教育精英家教网——...
  10. 谷歌大小写转换_如何轻松更改Google文档中文本的大小写