Spring Boot集成XXL-Job
发表于更新于
字数总计:1.4k阅读时长:6分钟 上海
后端后端Spring Boot集成XXL-Job
xukun一、项目简介
XXL‑Job 是一款开源的分布式任务调度框架,提供可视化的任务管理后台、灵活的任务触发策略、失败重试、日志查看等功能。将 XXL‑Job 与 Spring Boot 集成,可以快速在微服务或独立应用中调度定时任务,下面将详细介绍如何一步步完成接入。
二、环境准备
- JDK 1.8+
- Maven 3.5+
- Spring Boot 2.3+
- 已搭建好的 XXL‑Job Admin(管理后台),可参考XXL部署篇
三、添加依赖
在项目根目录下的 pom.xml
添加 xxl-job-core
依赖。以下为完整的 pom.xml
示例:
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
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>springboot-xxljob-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.5</version> <relativePath/> </parent>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.0</version> </dependency>
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
|
四、全局配置
在 src/main/resources/application.yml
中,添加 XXL‑Job 执行器(Executor)的配置。以下为完整的 application.yml
示例:
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
| spring: application: name: springboot-xxljob-demo
executor: name: job-executor
xxl: job: admin: addresses: "http://localhost:9090/xxl-job-admin" accessToken: "default_token" executor: appname: "${executor.name}" address: "" ip: "" port: 9999 logpath: "/code/xxl/${executor.name}" logretentiondays: 3
|
新建配置类:
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
|
@Slf4j @Configuration public class XxlJobConfig { protected static final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}") private String adminAddresses;
@Value("${xxl.job.accessToken}") private String accessToken;
@Value("${xxl.job.executor.appname}") private String appname;
@Value("${xxl.job.executor.address}") private String address;
@Value("${xxl.job.executor.ip}") private String ip;
@Value("${xxl.job.executor.port}") private int port;
@Value("${xxl.job.executor.logpath}") 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.setAddress(address); xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAccessToken(accessToken); xxlJobSpringExecutor.setLogPath(logPath); xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; } }
|
五、编写任务处理器
创建一个 JobHandler
,实现具体的业务逻辑,并在管理后台调度。示例:
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
@Slf4j @Component public class ArchiveTaskXxlJobHandler {
@Autowired private RoleService roleService;
@Autowired private WssController wssController;
@Autowired private DailyTaskService dailyTaskService;
@XxlJob("dailyTasksJobHandler") public void dailyTasksJobHandler(String param) throws Exception { List<Long> roleIds = roleService.getDailyOpenRoleIds(); for (Long roleId : roleIds) { try { dailyTaskService.executeDailyTasks(roleId); XxlJobHelper.log("角色 {} 每日任务执行成功", roleId); } catch (Exception e) { XxlJobHelper.log("角色 {} 每日任务执行失败:{}", roleId, e.getMessage()); } } }
@XxlJob("signTasks") public void signTasks(String param) throws Exception { List<Long> roleIds = roleService.getSignOpenRoleIds(); for (Long roleId : roleIds) { try { dailyTaskService.signTasks(roleId); XxlJobHelper.log("角色 {} 排位赛报名执行成功", roleId); } catch (Exception e) { XxlJobHelper.log("角色 {} 排位赛报名执行失败:{}", roleId, e.getMessage()); } } }
@XxlJob("bottleTasks") public void bottleTasks(String param) throws Exception { List<Long> roleIds = roleService.getBottleOpenRoleIds(); for (Long roleId : roleIds) { try { dailyTaskService.bottleTasks(roleId); XxlJobHelper.log("角色 {} 发条重启执行成功", roleId); } catch (Exception e) { XxlJobHelper.log("角色 {} 发条重启执行失败:{}", roleId, e.getMessage()); } } }
@XxlJob("hangupTasks") public void hangupTasks(String param) throws Exception { List<Long> roleIds = roleService.getHangOpenRoleIds(); for (Long roleId : roleIds) { try { dailyTaskService.hangupTasks(roleId); XxlJobHelper.log("角色 {} 挂机奖励领取成功", roleId); } catch (Exception e) { XxlJobHelper.log("角色 {} 挂机奖励领取执行失败:{}", roleId, e.getMessage()); } } } }
|
六、运行与调度
启动 XXL‑Job Admin 服务(默认在 http://localhost:9090/xxl-job-admin
)。
启动本地 Spring Boot 应用,控制台会看到注册信息。
访问管理后台,进入「执行器管理」可看到 job-executor
。

在「任务管理」中新建任务:
- 执行器:选择本项目
- 任务描述:打印时间
- 执行
JobHandler
:填 代码中绑定的对应Handler
- 调度类型:Cron
- 调度配置:例如
*/10 * * * * ?
(每 10 秒执行一次)

点击「立即执行」或「开启」后,可在日志页面查看执行效果。
