Xxl-Job小白使用

1.xxl-job介绍

1.1.1 xxl-job是什么

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

它是大众点评公司的许雪里开发出来的框架。
2、发展
在2015年中,由许雪里大神在github上创建XXL-Job项目仓库并提交第一个commit,在2015年11月,XXL-JOB框架RELEASE了第一个大版本V1.0,之后也登上了各大榜单,具体发展史可以看官网中的详细介绍,下面附有官网地址。现在很多公司都集成了该框架。
XXL 也正是大神许雪里名字的缩写。

1.1.2 xxl-job的特性

1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;

2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;

3、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;

4、故障转移:任务路由策略选择”故障转移”情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。

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

6、一致性:“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行

7、邮件报警:任务失败时支持邮件报警,支持配置多邮件地址群发报警邮件;

8、任务进度监控:支持实时监控任务进度;

3.3.3 xxl-job的几个角色

原生定时任务的概念:

  • 调度器 :负责对用户定义的所有任务进行调度。
  • 触发器 : 触发器在逻辑上包含两个属性,即如何触发该调度器和触发该调度器之后进行怎么样的操作
  • 任务 : 触发器在被触发后进行的操作,可以指定任意一个类的某个方法。

资源可以上马云上拉取
执行下方的sql脚本
在这里插入图片描述
在这里插入图片描述
下载的代码在idea打开,修改配置文件,这个数据库地址是刚刚跑的sql数据库地址
在这里插入图片描述

spring.datasource.url=jdbc:mysql://172.16.147.129:3306/xxl_job?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456

日志配置文件那个路径加一个点

启动类测试测试运行:http://localhost:8080/xxl-job-admin/
账号密码: “admin/123456”

在这里插入图片描述
可以把这个项目打包到服务器后台运行

在Spring Boot中项目使用

1.pom中引入依赖

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

2.添加配置类

@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:abc}")
    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.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }

3.配置yml

#######xxl-job######
xxl:
  job:
    accessToken: ''
    admin:
      addresses: http://localhost:8080/xxl-job-admin
    executor:
      appname: admin
      ip: 127.0.0.1
      logretentiondays: 30
      port: 19999

4.编写任务代码

/**
 * @author zengfl
 * @Date 下午4:09
 * @User 添砖Java的亮哥
 */
@Component
public class TestTesk {
    @XxlJob("testTask")
    public ReturnT<String> testTask(String param){
        System.out.println("执行成功");
        System.out.println(param);
        return ReturnT.SUCCESS;
    }
}

调度中心配置

在这里插入图片描述

保存后执行看看效果
在这里插入图片描述

容器部署命令

docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.211.128:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456 --spring.datasource.driver-class-name=com.mysql.jdbc.Driver" -p 18080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d --restart=always xuxueli/xxl-job-admin:2.1.2

3.4 小结

我们实现了xxl-job的安装和入门任务调用。

  1. 执行器 (微服)

    • 配置 appName 必须与xxl-job-admin平台上的执行器的appName一致
    • 配置ip与port, ip必须能ping通, port 不能超过65000
    • xxl-job-admin的地址 http://ip:8080/contextPath
    • 写代码的地址
      • @XxlJob(“jobHandler”)
      • 返回值 ReturnT, return ReturnT.SUCCESS
      • 平台日志:XxlJobLogger.log
      • 本地日志: @Sl4j
  2. xxl-job-admin平台

    • 安装,执行sql脚本,配置数据库所在ip, 用户名密码
    • 创建执行器, 指定appName
    • 创建任务, 指定jobHandler
    • 看执行日志、调度日志

4.0Spring定时任务入门

使用springboot来实现后台定时任务,只需以下三个注解即可

  1. @EnableScheduling 开启定时任务支持
  2. @Component 注册任务类
  3. @Scheduled 指定任务类方法执行时机

4.1 创建工程并引入依赖

创建工程名称:springtaskdemo

依赖如下:

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.3.8.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
</dependencies>

4.2 创建启动类



import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

/**
 * @version 1.0
 * @description 说明
 * @package 
 */
@SpringBootApplication
@EnableScheduling// 调度器
public class SpringTaskApp {

    public static void main(String[] args) {
        SpringApplication.run(SpringTaskApp.class, args);
    }
}

4.3 创建任务类


import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalTime;

/**
 * @version 1.0
 * @description 说明
 * @package
 */
@Component
public class MyJob {

    // cronExpression 七子表达式  秒 分 时 日 月 周 年。 日与周必须有一个为? 不能是过去的时间
    //             定时执行,过时不执行。
    // 例子: 0/2 * * * * ?   从0秒开始 每2秒执行一次
    // @Scheduled(cron = "0/3 * * * * ?")// 触发器 CronTrigger
    // jobHandler 任务处理器

    // SimpleTrigger 启动后一定执行,与时间点无关
    // initialDelay:启动后延迟多长时间后执行, fixedRate:执行的间隔周期, 每间隔多长时间后再执行
    @Scheduled(initialDelay = 1000, fixedRate = 2000)
    public void doMyJob(){
        System.out.println(LocalTime.now().toString());
    }
}

4.4 测试

运行启动类即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值