02 xxljob快速入门

编程入门 行业动态 更新时间:2024-10-28 15:29:01

文章目录

    • 1 项目搭建
    • 2 入门程序
      • 2.1 调度中心的部署
        • 2.1.1 准备工作:下载源代码
        • 2.1.2 application.properties配置文件介绍和修改
        • 2.1.3 初始化调度中心数据库
        • 2.1.4 打包部署
      • 2.2 创建执行器
      • 2.3 job开发
        • 2.3.1 API介绍
        • 2.3.2 定义一个demoJob继承IJobHandler
        • 2.3.3注册任务到执行器
        • 2.3.4启动类
      • 2.3 调度中心新建任务
      • 2.4 测试
      • 2.5 总结
        • 2.5.1 开发步骤
        • 2.5.2 xxl的job模式

1 项目搭建

  • 新建一个maven父工程:pom文件中dependencyManagement声明依赖外部jar包的版本 核心就是xxljob的jar:
  • <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.2.0</version> </dependency>

    完整内容如下:

    <dependencyManagement> <dependencies> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies></dependencyManagement><build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <target>1.8</target> <source>1.8</source> </configuration> </plugin> </plugins></build> 2 入门程序

    新建一个子模块01-xxl-job-quickstart:通过一个简单的demo,体验一下xxljob的使用 本次用的版本是2.2.0

    2.1 调度中心的部署

    根据前面的介绍,xxljob是通过调度中心rpc调用执行器,执行任务的。首先部署调度中心

    作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

    2.1.1 准备工作:下载源代码
  • 下载xxljob的源码,切换到对应版本的分支 码云地址:www.51sjk/Upload/Articles/1/0/261/261998_20210702002046196.jpg github地址:github/xuxueli/xxl-job
  • 源码中的 xxl-job-admin模块就是调度中心,是一个springboot项目。
  • 2.1.2 application.properties配置文件介绍和修改

    xxl-job-admin模块就是调度中心,是一个springboot项目。简单介绍一下配置文件

    ### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=root_pwdspring.datasource.driver-class-name=com.mysql.jdbc.Driver###报警邮箱spring.mail.host=smtp.qqspring.mail.port=25spring.mail.username=xxx@qqspring.mail.password=xxxspring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=truespring.mail.properties.mail.smtp.socketFactory.class=javax.ssl.SSLSocketFactory###调度中心通讯TOKEN [选填]:非空时启用;xxl.job.accessToken=###调度中心国际化配置 [必填]: 默认为 "zh_CN"/中文简体, 可选范围为 "zh_CN"/中文简体, "zh_TC"/中文繁体 and "en"/英文;xxl.job.i18n=zh_CN##调度线程池最大线程配置【必填】xxl.job.triggerpool.fast.max=200xxl.job.triggerpool.slow.max=100###调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能;xxl.job.logretentiondays=30

    我们修改的主要就是一下几个:

    • 端口号:默认是8080,可根据自己的喜好改自己的端口,这里我就改成1111
    • 数据库链接地址:这里我就没做修改,数据库名字为:xxl_job
    • 将数据库链接的用户名和密码改为自己的。
    2.1.3 初始化调度中心数据库
  • 数据库脚本文件位置:/xxl-job/doc/db/tables_xxl_job.sql
  • 创建数据库,根据刚刚配置的数据库名字创建对应的数据库
  • 执行sql脚本
  • 2.1.4 打包部署
  • mvn clean package
  • java -jar
  • 访问:localhost:1111/xxl-job-admin
  • 默认用户名和密码:admin/123456

    到此调度中心部署完成

    可以刚刚的jar包保存,以后自己本地测试就可以使用这个jar包,直接java -jar运行

    2.2 创建执行器

    下面就是在调度中心创建执行器

  • 打开执行器管理、
  • 新增执行器
  • 2.3 job开发 2.3.1 API介绍
  • 抽象类:com.xxl.job.core.handler.IJobHandler 所有的job需要继承该抽象基类,实现其抽象方法execute
  • public abstract class IJobHandler {/** success */public static final ReturnT<String> SUCCESS = new ReturnT<String>(200, null);/** fail */public static final ReturnT<String> FAIL = new ReturnT<String>(500, null);/** fail timeout */public static final ReturnT<String> FAIL_TIMEOUT = new ReturnT<String>(502, null);/** * execute handler, invoked when executor receives a scheduling request * * @param param * @return * @throws Exception */public abstract ReturnT<String> execute(String param) throws Exception;/** * init handler, invoked when JobThread init */public void init() throws InvocationTargetException, IllegalAccessException {// do something}/** * destroy handler, invoked when JobThread destroy */public void destroy() throws InvocationTargetException, IllegalAccessException {// do something}} 2.3.2 定义一个demoJob继承IJobHandler package study.wyy.job.xxl.task;import com.xxl.job.core.biz.model.ReturnT;import com.xxl.job.core.handler.IJobHandler;import com.xxl.job.core.log.XxlJobLogger;import java.util.concurrent.TimeUnit;/** * @author wyaoyoa * @description * @date 2021/1/4 15:07 */public class DemoJob extends IJobHandler { public ReturnT<String> execute(String param) throws Exception { // 执行日志:需要通过 "XxlJobLogger.log" 打印执行日志 XxlJobLogger.log("demo job start.... param is: "+param); TimeUnit.SECONDS.sleep(5); XxlJobLogger.log("demo job end.... param is: "+param); return ReturnT.SUCCESS; }} 2.3.3注册任务到执行器 package study.wyy.job.xxl.config;import com.xxl.job.core.executor.XxlJobExecutor;import lombok.extern.slf4j.Slf4j;import study.wyy.job.xxl.task.DemoJob;/** * @author wyaoyao * @description * @date 2021/1/4 15:23 * 配置job */@Slf4jpublic class XxlJobConfig { XxlJobExecutor xxlJobExecutor; // 配置job的执行器: public void initXxlJobExecutor(){ // 注册任务,这里的key后面会用到 XxlJobExecutor.registJobHandler("demoJob",new DemoJob()); xxlJobExecutor = new XxlJobExecutor(); // 设置调度中心地址 xxlJobExecutor.setAdminAddresses("localhost:1111/xxl-job-admin"); // 设置应用名字 xxlJobExecutor.setAppname("xxl-job-quickstart"); // 设置执行器的端口和ip 可以不指定,调度中心可以自动发现ip //xxlJobExecutor.setIp("127.0.0.1"); xxlJobExecutor.setPort(9999); //xxlJobExecutor.setAddress("localhost:9999"); // 执行器运行日志文件存储磁盘路径 [选填] xxlJobExecutor.setLogPath("D:\\log\\xxljob\\executor"); // 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能; xxlJobExecutor.setLogRetentionDays(4); // 启动执行器 try { xxlJobExecutor.start(); } catch (Exception e) { log.error(e.getMessage(),e); e.printStackTrace(); } }// 当我们的程序结束的时候需要销毁执行器 public void destroy(){ if (xxlJobExecutor != null) { xxlJobExecutor.destroy(); } }} 2.3.4启动类 package study.wyy.job.xxl;import com.xxl.job.core.executor.XxlJobExecutor;import lombok.extern.slf4j.Slf4j;import study.wyy.job.xxl.config.XxlJobConfig;import java.util.concurrent.TimeUnit;/** * @author wyaoyao * @description * @date 2021/1/4 16:02 */@Slf4jpublic class Client { public static void main(String[] args) { XxlJobConfig xxlJobConfig = new XxlJobConfig(); try { // 配置执行器,并启动 xxlJobConfig.initXxlJobExecutor(); while (true) { TimeUnit.HOURS.sleep(1); } }catch (Exception e){ log.error(e.getMessage(),e); }finally { xxlJobConfig.destroy(); } }} 2.3 调度中心新建任务

    这里配置的任务参数会被传递到execute方法的形参中,是字符串类型

    2.4 测试
  • 启动启动类
  • 调度中心启动任务
  • 观察执行日志
  • 2.5 总结 2.5.1 开发步骤

    开发来说还是比较麻烦的,不是很喜欢,哈哈哈,

  • 部署调度中心服务
  • 创建执行器
  • 开发任务
  • 向执行器中注册任务,配置执行器的一些基本配置信息
    • 执行器的ip和端口:观察启动日志,可以发现,xxljob会启动一个netty服务
    • 设置调度中心的地址
    • 设置应用的名字
    • 设置日志相关配置:日志保存路径和日志保存时间
  • 调度中心中选择执行器并创建任务,配置任务的基本信息
    • cron表达式
    • 任务的模式:bean模式和glue模式(入门程序演示的是bean模式)
    • 任务的超时时间,参数,路由策略等等
  • 启动我们的程序之后,再去调度中心启动任务
  • 启动日志中,netty服务的启动 xxljob也依赖了netty,xxl应该是会将执行器作为一个netty服务,调度中心通过rpc远程调用执行器,触发任务。

    2.5.2 xxl的job模式
    • BEAN模式(类形式) Bean模式任务,支持基于类的开发方式,每个任务对应一个Java类。刚刚的入门程序便是采用的这个模式 优点:不限制项目环境,兼容性好。即使是无框架项目,如main方法直接启动的项目也可以提供支持 缺点:每个任务需要占用一个Java类,造成类的浪费;不支持自动扫描任务并注入到执行器容器,需要手动注入。

    • BEAN模式(方法形式) Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。 优点:每个任务只需要开发一个方法,并添加”@XxlJob”注解即可,更加方便、快速。 支持自动扫描任务并注入到执行器容器。 缺点:要求Spring容器环境;

    • GLUE模式(Java) 任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。

    • 0
    • 0
    • 0
    • 0
    • 0

    更多推荐

    02 xxljob快速入门

    本文发布于:2023-06-10 22:57:43,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/620885.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:入门   快速   xxljob

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!