Springboot项目整合xxl -job
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相关推荐
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...
- springboot项目整合mybatis
SpringBoot项目整合mybatis 本章内容 使用 idea创建 SpringBoot项目 SpringBoot项目中配制 mybatis 框架 1 创建 SpringBoot项目 1.1 在 ...
- springboot项目整合阿里云oss的内容审核
springboot项目整合阿里云 内容审核 第一 添加依赖 <dependency><groupId>com.aliyun</groupId><artifa ...
- Java springBoot项目整合海康威视摄像头抓拍车辆功能
Java springBoot项目整合海康威视摄像头抓拍获取车辆信息功能 这篇文字写于去年的11月份,项目部署上去一段时间后,被反应有自动停止抓拍的BUG,我在代码中的解决办法是写了一个定时任务, 让 ...
- SpringBoot项目整合OpenFeign、实现动态IP+URL请求、自定义(编码器\解码器)
SpringBoot项目整合OpenFeign 基础操作 pom依赖 配置application.yml 服务启动类 基础跨服务调用 动态IP+URL请求 + 动态编码器\解码器 自定义跨服务请求,E ...
- Nginx安装配置与SpringBoot项目整合
本篇文章将在上篇<Redis安装与SpringBoot项目整合详细教程>(上文链接:https://blog.csdn.net/sp958831205/article/details/88 ...
- SpringBoot项目整合Retrofit最佳实践,这才是最优雅的HTTP客户端工具!
作者:六点半起床 juejin.im/post/6854573211426750472 大家都知道okhttp是一款由square公司开源的java版本http客户端工具.实际上,square公司还开 ...
- spring-boot项目整合obs服务器-华为云
目录 前言 1.购买服务并从官网获得我们项目所需的配置参数 1-1.登录华为云 1-2.进入控制台 1-3.创建桶 1-4.获取sk.ak 2.spring-boot项目集成OBS服务器 2-1 ...
- RabbitMQ的6种工作模式的学习记录,普通MAVEN和springboot项目整合rabbitmq的API详解
1.RabbitMQ后台管理页面 2.RabbitMQ 核心(自我理解) 3.RabbitMQ6种工作模式介绍 4. RabbitMQ的消息可靠性 5.RabbitMQ普通MAVEN项目使用 6.Sp ...
- springboot系列学习(十九):springboot项目整合Druid,Druid到底是什么,他是在项目中如何使用的
目录 Druid是什么 先看一下之前的整合的jdbc使用的数据源是什么 创建一个springboot项目,导入Druid依赖 写一个Druid的配置类 yml文件和配置类绑定,这个之前就写过 解释以上 ...
最新文章
- 首款AI看球机器人亮相北京,已上线IOS版和安卓版
- 【IntelliJ IDEA】快捷键
- select下拉框下拉跳转代码
- 多域名下Mvc的Http缓存冲突的问题
- 前端学习(2852):简单秒杀系统学习之鼠标点击方法
- 2.Building Models from Convolutions
- Spring Cloud微服务之公共服务模块抽取(五)
- 热力图怎么做_LncRNA这么热,5分左右的LncRNA研究文章应该怎么做
- 【渝粤教育】国家开放大学2018年秋季 0248-21T电工电子技术 参考试题
- java开发工程师面试问题大全及答案大全
- 蓝兔子现在有一个字符串,如果一个字符串从左向右看和从右向左看是一样的,则称为回文串。请编写程序,帮助蓝兔子判断输入的字符串是否是回文串。
- 删除cortana_如何从Windows 10任务栏中删除Cortana
- matlab 添加子图图案,matplotlib给子图添加图例的方法
- 不同进制之间相互转换
- 小程序开发——页面背景色设置
- 全国计算机等级考试有java吗,请问全国计算机等级考试有没有二级Java?
- oracle cpu使用率高怎么排查解决,OracleCPU占用率较高的处理方法
- python设计拼图小游戏_关于python:教你用Python自制拼图小游戏轻松搞定熊孩子
- MyISAM 存储引擎(mysql 8.0)
- 35岁程序员,早到的中年危机
热门文章
- Fiddler出现“The system proxy was changed. Click to reenable capturing.”,代理排查
- vulnhub:Who Wants To Be King: 1
- Spring Boot @DeleteMapping(转)
- Vmware安装Ubuntu16.0.4出现Assuming drive cache: write through和1920X1080分辨率调节问题
- iOS逆向:【ARM 移位操作】(LSL、ASL、LSR、ASR、ROR、RRX)
- Android APK上架 应用宝 没有 固件版本 不显示
- 怎么免费注册微信小程序-微信小程序开发-视频教程1
- 《都挺好》一部黑码农的神剧!
- 以下不属于大气数据计算机系统的传感器是,下列不属于地理信息技术的是 A. 遥感 B.传感器 C. 全球定位系统 D. 地理信息系统——青夏教育精英家教网——...
- 谷歌大小写转换_如何轻松更改Google文档中文本的大小写