经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
SpringBoot整合Xxl-job实现定时任务的全过程
来源:jb51  时间:2022/1/17 12:17:19  对本文有异议

前言

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

如果是单机并且定时任务不多的情况,可以选择Timer注解@Scheduled或者Cron工具类等方式来实现,但是这有个缺点,那就是定时任务会写死在代码中,一旦启动,就不能暂停或者修改。如果修改的话,整个还项目要重新编译,这属实非常的麻烦。

? 本篇文章将会介绍如何通过xxl-job来实现任务的调度

一、部署调度中心

1、项目下载

下面是调度中心代码的gitee地址,可以colon到本地

  1. http://gitee.com/xuxueli0323/xxl-job

2、初始化数据

在下载好的项目中的doc/db目录下有一个tables_xxl_job.sql文件,先放到自己的数据库中执行,其实就是初始化好调度中心需要的表结构和数据

3、修改properties配置文件

用IDE打开clone好的项目,然后修改xxl-job-admin模块下的properties配置文件,只需要将连接数据库的url、username、password修改成你自己的就可以。修改好之后就可以启动xxl-job-admin调度中心了。然后打开http://localhost:8080/xxl-job-admin/就可以看到控制面板:

请添加图片描述

二、部署SpringBoot项目

1、引入依赖

  1. <dependency>
  2. <groupId>com.xuxueli</groupId>
  3. <artifactId>xxl-job-core</artifactId>
  4. <version>2.2.0</version>
  5. </dependency>

2、创建配置类

  1. @Configuration
  2. public class XxlJobConfig {
  3. private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
  4.  
  5. @Value("${xxl.job.admin.addresses}")
  6. private String adminAddresses;
  7.  
  8. @Value("${xxl.job.executor.appname}")
  9. private String appName;
  10.  
  11. @Value("${xxl.job.executor.ip}")
  12. private String ip;
  13.  
  14. @Value("${xxl.job.executor.port}")
  15. private int port;
  16.  
  17. @Value("${xxl.job.accessToken}")
  18. private String accessToken;
  19.  
  20. @Value("${xxl.job.executor.logpath}")
  21. private String logPath;
  22.  
  23. @Value("${xxl.job.executor.logretentiondays}")
  24. private int logRetentionDays;
  25.  
  26.  
  27. @Bean
  28. public XxlJobSpringExecutor xxlJobExecutor() {
  29. logger.info(">>>>>>>>>>> xxl-job config init.");
  30. XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
  31. xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
  32. xxlJobSpringExecutor.setAppname(appName);
  33. xxlJobSpringExecutor.setIp(ip);
  34. xxlJobSpringExecutor.setPort(port);
  35. xxlJobSpringExecutor.setAccessToken(accessToken);
  36. xxlJobSpringExecutor.setLogPath(logPath);
  37. xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
  38.  
  39. return xxlJobSpringExecutor;
  40. }
  41. }

3、修改配置文件

  1. xxl:
  2. job:
  3. admin:
  4. addresses: http://127.0.0.1:8080/xxl-job-admin #部署的调度中心的url
  5. executor:
  6. appname: xxl-job-volunteer-executor #执行器的名字
  7. ip:
  8. port: 9999 #调度中心调用执行器时使用的端口
  9. logpath: /data/apploggs/xxl-job/jobhandler #日志路径
  10. logretentiondays: 30 #日志保留天数
  11. accessToken:

4、创建执行器

  1. @Component
  2. public class XxlJobSample {
  3.  
  4. // myDemoJob是任务的名字,也是Spring中bean的名字
  5. @XxlJob("myDemoJob")
  6. public ReturnT<String> myDemoJob(String value) {
  7. System.out.println("myDemoJob:定时任务触发:" + value);
  8. return ReturnT.SUCCESS;
  9. }
  10. }

5、启动SpringBoot项目

启动成功后会看到下面两行日志信息, 可以看到成功连接到了调度中心然后注册了将要被调度任务

  1. >>>>>>>>>>> xxl-job register jobhandler success, name:myDemoJob, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class com.volunteer.component.XxlJobSample#myDemoJob]
  2. >>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9999

三、通过调度中心进行任务调度

1、添加执行器

请添加图片描述

输入配置文件中配置的appName,名称可以随意

请添加图片描述

2、添加任务

新增调度任务

请添加图片描述

请添加图片描述

查看调度任务

请添加图片描述

3、任务调度中心发起任务调度

请添加图片描述

在SpringBoot项目中可以看到控制台输出如下信息:

  1. 2022-01-16 11:54:05.039 INFO 7836 --- [Pool-1148366645] c.xxl.job.core.executor.XxlJobExecutor : >>>>>>>>>>> xxl-job regist JobThread success, jobId:7, handler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class com.volunteer.component.XxlJobSample#myDemoJob]
  2. myDemoJob:定时任务触发:testParam
  3. 2022-01-16 11:55:38.059 INFO 7836 --- [ Thread-22] com.xxl.job.core.thread.JobThread : >>>>>>>>>>> xxl-job JobThread stoped, hashCode:Thread[Thread-22,10,main]

四、小结

至此,SpringBoot整合Xxl-job就完成了,刚才的示例代码其实对于原来的项目还是有一定的侵入性的,上面仅仅演示了BEAN运行模式,说白了就是调用加了@XxlJob的方法。其实在创建任务的时候还可以尝试使用GLUE(Java)这一运行模式,这种方式其实就是执行你输入的Java代码,这种方式可以不用在原有的项目之上新增依赖或者配置,对于定时任务,只需要编写一个接口用于触发,然后GLUE(Java)任务定时的去请求暴露的接口即可

下面是代码片段:

  1. public class DemoGlueJobHandler extends IJobHandler {
  2.  
  3. @Override
  4. public void execute() throws Exception {
  5. XxlJobHelper.log("定时任务执行了一次");
  6. HttpRequest.post("http://localhost:8088/oos/test")
  7. .header(Header.USER_AGENT, "xxl-job")//头信息,多个头信息多次调用此方法即可
  8. .timeout(20000)//超时,毫秒
  9. .execute();
  10. }
  11.  
  12. }

上面的代码其实会在执行器中进行执行,可以实现在Test里面跑一下,没有问题后再贴过来(还要注意复制import等信息)

以上就是今天的全部内容了,想了解更多,可以阅读官方文档

总结

到此这篇关于SpringBoot整合Xxl-job实现定时任务的文章就介绍到这了,更多相关SpringBoot整合Xxl-job实现定时任务内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号