【xxl-job】轻松实现分布式定时任务demo实例
【项目描述】
前段时间专门独立了一个spring boot服务,用于做和第三方erp系统的对接工作。此服务的第一个需求工作就是可以通过不同的规则,设置不同的定时任务,从而获取erp系统的商品数据。所以,系统架构采用了xxl-job实现分布式定时任务。
【学习背景】
此项目不是我负责的,在上个月同事让我帮忙处理一个问题,便带给了我学习的机会,这个框架已经在线上环境使用,但框架也不是我参与搭建的,所以还是找到官方文档和项目实例,积累下技术与项目经验。本篇博客是一个简单的demo实例,主要总结下如何将此框架与我们的项目结合。
【实例搭建】
初始化“调度数据库”
下载项目源码,获取“调度数据库初始化SQL脚本”,正常情况下生成16张表。
sql脚本位置: /xxl-job/doc/db/tables_xxl_job.sql
项目源码地址:https://github.com/xuxueli/xxl-job
在IDEA中,我们可以直接选择通过github地址新建项目:
配置部署“调度中心"
调度中心配置文件地址:
/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties
我们只需要将数据库连接配置修改成自己的环境:
部署项目
正确进行上述配置后,我们可将项目编译打war包部署到tomcat中。调度中心访问地址:http://localhost:8080/xxl-job-admin (默认8080端口,该地址执行器将会使用到,作为回调地址)
我使用的是IDEA中Smart Tomcat部署的项目:
部署成功的话,你可以看到如下界面:
使用管理系统,在“任务管理"中,新建一个定时任务,填写好相关的配置信息
使用管理系统,在“执行器管理”中配置一个执行器,也就是我们的项目中需要用到的
至此,调度中心的部署和配置工作结束了。下面是将此配置与我们的项目结合。只是一个demo实例,我就新建了一个spring boot框架项目,加入xxl-job框架搭建步骤如下:
1.项目加入maven依赖
1 2 3 4 5 6 | <!-- http: //repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ --> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version> 1.9 . 1 </version> </dependency> |
2.xxlJobConfig配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | @Slf4j @Configuration //扫描定时任务设置包路径 @ComponentScan (basePackages = "com.uqiauto.springbootxxljob.job" ) public class XxlJobConfig { @Value ( "${xxl.job.admin.address}" ) private String adminAddresses; @Value ( "${xxl.job.executor.appname}" ) private String appName; @Value ( "${xxl.job.alarmEmail}" ) private String alarmEmail; @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 XxlJobExecutor xxlJobExecutor() { log.info( ">>>>>>>>>>> xxl-job config init." ); XxlJobExecutor xxlJobExecutor = new XxlJobExecutor(); xxlJobExecutor.setAdminAddresses(adminAddresses); xxlJobExecutor.setAppName(appName); xxlJobExecutor.setIp(ip); xxlJobExecutor.setPort(port); xxlJobExecutor.setAccessToken(accessToken); xxlJobExecutor.setLogPath(logPath); xxlJobExecutor.setLogRetentionDays(logRetentionDays); return xxlJobExecutor; } public String getAdminAddresses() { return adminAddresses; } public String getAppName() { return appName; } public String getIp() { return ip; } public int getPort() { return port; } public String getAccessToken() { return accessToken; } public String getLogPath() { return logPath; } public int getLogRetentionDays() { return logRetentionDays; } public String getAlarmEmail() { return alarmEmail; } } |
3.定时任务设置demo job
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /** * 任务Handler示例(Bean模式) * * 开发步骤: * 1、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”; * 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例; * 3、注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。 * 4、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志; * * @author xuxueli 2015-12-19 19:43:36 */ @JobHandler (value= "demoJobHandler" ) @Component public class DemoJobHandler extends IJobHandler { @Override public ReturnT<String> execute(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 SUCCESS; } } |
4.项目中配置xxl-job框架需要用到的信息
1 2 3 4 5 6 7 8 9 10 11 | xxl.job: admin.address: http: //localhost:8088/xxl-job-admin/ accessToken: alarmEmail: 18333617859 @163 .com executor: appname: xxl-job-executor-sample ip: port: 9999 logpath: /data/applogs/xxl-job/jobhandler #执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持 3 天,否则功能不生效; logretentiondays: - 1 |
至此,整个搭建步骤就完成了。我设置的定时任务是每小时执行一次,同时也支持我们在管理系统页面去手动执行,最终我们可以通过管理系统去查看到定时任务执行的相关日志信息:
每条日志的详细信息:
【学习总结】
本篇博客只是一个简单的教程,将xxl-job分布式定时任务框架结合到一个spring boot 项目中,后面还会深入学习此分布式定时任务框架的其他知识,将此分布式定时任务框架与其他框架进行对比学习。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理