一、搭建xxl-job

1、下载xxl-job代码

  码云地址:https://gitee.com/xuxueli0323/xxl-job

  gitHub地址:https://github.com/xuxueli/xxl-job

2、执行SQL

  在数据库执行   \xxl-job\doc\db\tables_xxl_job.sql

  

3、导入idea

  导入已存在的模块:File--New--Module from Existing Sources...

  选择pom文件,直接导入

4、修改配置文件

  修改配置文件:xxl-job\xxl-job-admin\src\main\resources\application.properties

  调整数据库连接、控制台用户名密码等内容

  此处特别说明一点,邮箱配置的password并不是邮箱密码,而是邮箱的授权码(授权码获取步骤自己百度),如果配置成邮箱密码,当定时任务异常需要发邮件时,会出现邮件发送535错误。

### 调度中心项目的端口号以及访问路径
server.port=8081
server.context-path=/xxl-job-admin ### 配置静态文件的前缀
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/ ### 配置模板文件
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.########## ### 配置mybatis的mapper文件地址
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml ### 配置数据库的地址
spring.datasource.url=jdbc:mysql://***:3306/xxl_job?Unicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=30
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.validation-query=SELECT 1
spring.datasource.tomcat.validation-interval=30000 ### 配置报警邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory ### 调度中心通讯TOKEN,非空时启用
xxl.job.accessToken= ### 调度中心国际化设置,默认为中文版本,值设置为“en”时切换为英文版本 xxl-job, i18n (default empty as chinese, "en" as english)
xxl.job.i18n= ### 7、管理界面的登录用户名密码
xxl.job.login.username=admin
xxl.job.login.password=123456

  5、启动项目

运行main函数,访问  http://localhost:8081/xxl-job-admin/toLogin  ,输入用户名密码(在application.properties中配置的),登陆,到此为止,xxl-job项目部署成功。

二、项目中使用xxl-job

 1、导入xxl-job依赖

        <dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.2</version>
</dependency>

 2、配置文件中(application.yml)配置xxl-job配置

  其中appname为项目名

xxl:
job:
accessToken:
executor:
appname: demo
ip:
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: -1
port: 9999
admin:
addresses: http://localhost:8081/xxl-job-admin

 3、添加xxl-job配置类

  直接复制,无需更改。

package com.example.demo.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Slf4j
@Configuration
public class XXlJobConfig {
@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; @Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
log.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;
}
}

 4、定时任务控制器

  (1)定时任务实现类

  此处模拟一个最简单的打印输出

package com.example.demo.service;

import org.springframework.stereotype.Service;

@Service
public class DemoJobService {
public void demoTest(String s1){
System.out.println("==============" + s1);
}
}

  (2)handler

  此处注解非常重要。

package com.example.demo.handler;

import com.example.demo.service.DemoJobService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; @JobHandler(value = "demoHandler")
@Component
@Slf4j
@RequiredArgsConstructor
public class DemoHandler extends IJobHandler { private final DemoJobService demoJobService; @Override
public ReturnT<String> execute(String s1) throws Exception {
XxlJobLogger.log("xxl-job测试任务开始执行。【args: {}】", s1);
try {
demoJobService.demoTest(s1);
XxlJobLogger.log("xxl-job测试任务执行结束。");
return SUCCESS;
} catch (Exception e) {
XxlJobLogger.log("xxl-job测试任务执行出错!", e);
return FAIL;
}
}
}

  至此,使用xxl-job的项目配置处理完毕。

三、定时任务执行配置

  1、执行器配置

  登陆xxl-job控制台后,点击执行器管理------新增执行器。

  执行器中内容:

    AppName:在使用xxl-job项目中配置的appname(见第二步中的第2点)

    名称:随便填写(由于可能会多个项目同时使用xxl-job,因此建议一个项目一个执行器,且执行器名称直接可以看出是哪个项目)

    排序:1

    注册方式:自动注入

    机器地址:空(xxl-job会自动扫描识别地址)

 2、定时任务配置

  任务管理---新增

  任务中内容:

    执行器:选择指定的执行器

    任务描述:定时任务的名称

    路由策略:可以根据自己的需要选择(一般选择轮询)

      FIRST(第一个):固定选择第一个机器

      LAST(最后一个):固定选择最后一个机器          

      ROUND(轮询):轮询执行

      RANDOM(随机):随机选择在线的机器;

      CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。

      LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;

      LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举

      FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;

      BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;

      SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;

    Cron:定时任务执行时间(此处测试是每秒执行一次,所以配置的* * * * * ?)

    运行模式:可根据自己需要选择(一般选择BEGAN)

      BEAN模式:任务以JobHandler方式维护在执行器端;需要结合 "JobHandler" 属性匹配执行器中任务;

      GLUE模式(Java):任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 "groovy" 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务;

      GLUE模式(Shell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "shell" 脚本;

      GLUE模式(Python):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "python" 脚本;

      GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "php" 脚本;

      GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "nodejs" 脚本;

      GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "PowerShell" 脚本;

    jobHandler:定时任务中@JobHandler注解中的配置

    阻塞处理策略:根据自己需要选择(一般选择单机串行)

      单机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;

      弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;

      覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;

    子任务ID:每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取),当本任务执行结束并且执行成功时,将会触发子任务ID所对应的任务的一次主动调度。一般为空。

    任务超时时间:支持自定义任务超时时间,任务运行超时将会主动中断任务

    失败重试次数;支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;

    报警邮件:任务调度失败时邮件通知的邮箱地址,支持配置多邮箱地址,配置多个邮箱地址时用逗号分隔;

    负责人:任务的负责人

    执行参数:任务执行所需的参数,多个参数时用逗号分隔,任务执行时将会把多个参数转换成数组传入;

 3、测试

  点击操作,执行一次,然后查看日志,看是否执行成功

  

  此处显示执行成功,然后可以在操作按钮下正式启动定时任务。

  开启定时任务后,可见后台在持续执行(按照配置的一秒输出一次)

  校验失败通知和重试次数:

  在实现类中添加代码:int k = 10/0;

  查看执行日志,失败了6次(原因是调度平台配置了失败后重试5次)

  

  在看调度平台中配置的异常警告邮件,也是有6次告警。这里可以将异常抛出,并在告警邮件中展示。

四、在docker上部署xxl-job

  1、打包xxl-job-admin

  2、在服务器中创建xxl-job文件夹: mkdir /usr/data/xxl-job

  3、进入新创建的xxl-job文件夹,新建一个dockerfile文件,编辑文件

# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER lcl <liconglong@163.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar,此处的jar包名称一定要与要部署的jar包名称一致
ADD xxl-job-admin-2.1.1-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

  命令详解:

    FROM:基础镜像名称

    MAINTAINER:作者信息

    VOLUME:数据挂载

    ADD:项目的 jar 文件作为 “app.jar” 添加到容器的 ENTRYPOINT 执行项目 app.jar

    ENTRYPOINT:指定容器启动时需要执行的命令(为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source 如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了)

  4、将xxl-job-admin.jar上传至xxl-job文件夹

  5、构建新的镜像

  docker build -t xxl-job-admin .    (后面的.一定不要遗漏)

  6、使用xxl-job-admin镜像启动新容器

   docker run -d -p 8081:8081 xxl-job-admin

  -d:后台运行

  -p:端口映射

  7、验证

  http://ip:8081/xxl-job-admin

  五、调整项目配置

  更改第二步第2点中的xxl-job地址

  六、按照第三步重新配置定时任务即可。

xxl-job搭建、部署、SpringBoot集成xxl-job的更多相关文章

  1. Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)

    Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面开始搭建.net持续集成环境 Jenkins和SVN安装这里就不介绍了 一.准备工作 1.Jenkins中系统 ...

  2. springboot集成mybatis(逆向工程),热部署以及整合Swagger2

    本文是作者原创,版权归作者所有.若要转载,请注明出处. springboot集成mybatis和mybatis-generator插件 1.新建Springboot项目(略) 2.导入相关依赖 < ...

  3. IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈项目有来商城云环境的部署方式

    一. 前言 最近有些童鞋对开源微服务商城项目 youlai-mall 如何部署到线上环境以及项目中 的Dockerfile 文件有疑问,所以写了这篇文章做个答疑以及演示完整的微服务项目发布到线上的流程 ...

  4. 通过springBoot集成搭建webScoket服务器

    前言: 最近工作中有一个需求,就是服务端要主动推送消息给客户端,而我们平常的Http请求只能一请求一响应,为此学习了webScokset通讯技术,以下介绍的是java 通过SpringBoot集成we ...

  5. SpringBoot集成RabbitMQ消息队列搭建与ACK消息确认入门

    1.RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.Rabbi ...

  6. SpringBoot集成Swagger,Postman,newman,jenkins自动化测试.

    环境:Spring Boot,Swagger,gradle,Postman,newman,jenkins SpringBoot环境搭建. Swagger简介 Swagger 是一款RESTFUL接口的 ...

  7. SpringBoot集成ssm-druid-通用mapper

    简单介绍 springboot 首先什么是springboot? springboot是spring的另外一款框架,设计目的是用来简化新的spring应用的搭建和开发时所需要的特定的配置,从而使开发过 ...

  8. springboot集成redis(mybatis、分布式session)

    安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...

  9. springboot集成schedule(深度理解)

    背景 在项目开发过程中,我们经常需要执行具有周期性的任务.通过定时任务可以很好的帮助我们实现. 我们拿常用的几种定时任务框架做一个比较: 从以上表格可以看出,Spring Schedule框架功能完善 ...

  10. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

随机推荐

  1. Rocket - tilelink - Monitor

    https://mp.weixin.qq.com/s/6e-G5RSQc7Xje7mQj8-Lag   简单介绍Monitor的实现.   ​​   1. 基本介绍   用于监控各个channel上的 ...

  2. 【HBase】表的version

    建表.添加数据 Examples: hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40'] hbase> c ...

  3. ActiveMQ 笔记(七)ActiveMQ的多节点集群

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.Activemq 的集群思想 1.使用Activemq集群的原因 面试题: 引入消息中间件后如何保证 ...

  4. Linux、Android系统调用从上层到底层的调用路径浅析

    参考: https://blog.csdn.net/liuhangtiant/article/details/85149369 http://blog.sina.com.cn/s/blog_79433 ...

  5. (Java实现) N皇后问题

    n皇后问题是一个以国际象棋为背景的问题:在n×n的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后,即任意两个皇后都不能处于同一条横行.纵行或斜线上. 蛮力法思想: 解决n皇后问题 ...

  6. Java实现 蓝桥杯 算法提高 快乐司机

    算法提高 快乐司机 时间限制:1.0s 内存限制:256.0MB 问题描述 "嘟嘟嘟嘟嘟嘟 喇叭响 我是汽车小司机 我是小司机 我为祖国运输忙 运输忙" 这是儿歌"快乐的 ...

  7. Java实现 LeetCode 488 祖玛游戏

    488. 祖玛游戏 回忆一下祖玛游戏.现在桌上有一串球,颜色有红色,黄色(Y),蓝色(B),绿色(G),还有白色(W). 现在你手里也有几个球. 每一次,你可以从手里的球选一个,然后把这个球插入到一串 ...

  8. Java实现 LeetCode 108 将有序数组转换为二叉搜索树

    108. 将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: ...

  9. Java实现 蓝桥杯VIP 算法提高 夺宝奇兵

    算法提高 夺宝奇兵 时间限制:1.0s 内存限制:512.0MB [题目描述] 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: ...

  10. Java实现蓝桥杯G将军

    G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加队员 ...