若依框架(RuoYi)是一个基于Spring Boot的快速开发平台,而XXL-JOB则是一款分布式任务调度平台。将两者整合可以为系统提供强大的任务调度能力,同时利用若依框架的便捷性,实现高效的任务管理。
以下是对如何在若依框架中整合XXL-JOB实现分布式任务调度的详细解析:
XXL-JOB是一款开源的分布式任务调度平台,支持任务分片、失败重试、定时调度等功能,适用于需要大规模任务调度的场景。其核心功能包括:
若依框架是一个基于Spring Boot和Spring Cloud的快速开发平台,提供了代码生成器、权限管理、日志记录等模块,适合用于快速构建企业级应用。通过整合XXL-JOB,可以进一步增强系统的任务调度能力。
在若依项目的pom.xml
文件中添加XXL-JOB的依赖:
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
确保版本与XXL-JOB服务器端一致。
在application.yml
中配置XXL-JOB的相关参数:
xxl:
job:
admin:
addresses: http://127.0.0.1:8080/xxl-job-admin # XXL-JOB管理端地址
executor:
appname: ruoyi-executor # 执行器名称
ip:
port: 9999 # 执行器端口
logpath: ./joblogs # 日志路径
logretentiondays: 30 # 日志保留天数
创建一个类实现IJobHandler
接口,并注册到XXL-JOB中:
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
@Component
public class MyJobHandler extends IJobHandler {
@XxlJob("myJobHandler")
@Override
public ReturnT<String> execute(String param) throws Exception {
System.out.println("任务执行中:" + param);
return SUCCESS;
}
}
上述代码定义了一个名为myJobHandler
的任务处理器,任务执行时会打印参数信息。
创建一个类实现ApplicationRunner
接口,在应用启动时初始化XXL-JOB执行器:
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class XxlJobConfig implements CommandLineRunner {
@Resource
private org.springframework.core.env.Environment env;
private XxlJobSpringExecutor xxlJobExecutor;
@Autowired
public XxlJobConfig(org.springframework.core.env.Environment env) {
this.env = env;
}
@Override
public void run(String... args) throws Exception {
xxlJobExecutor = new XxlJobSpringExecutor();
xxlJobExecutor.setAdminAddresses(env.getProperty("xxl.job.admin.addresses"));
xxlJobExecutor.setAppname(env.getProperty("xxl.job.executor.appname"));
xxlJobExecutor.setIp(env.getProperty("xxl.job.executor.ip"));
xxlJobExecutor.setPort(Integer.valueOf(env.getProperty("xxl.job.executor.port")));
xxlJobExecutor.setAccessToken(env.getProperty("xxl.job.accessToken"));
xxlJobExecutor.setLogPath(env.getProperty("xxl.job.executor.logpath"));
xxlJobExecutor.setLogRetentionDays(Integer.valueOf(env.getProperty("xxl.job.executor.logretentiondays")));
xxlJobExecutor.start();
}
}
下载XXL-JOB管理端并启动,默认访问地址为http://localhost:8080/xxl-job-admin
。使用默认账号admin
和密码123456
登录后,添加执行器并配置任务。
如果需要支持任务分片,可以通过ShardingContext
获取分片参数:
import com.xxl.job.core.context.ShardingContext;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
@Component
public class ShardingJobHandler {
@XxlJob("shardingJobHandler")
public void shardingJob(ShardingContext context) {
int shardIndex = context.getShardIndex(); // 当前分片索引
int shardTotal = context.getShardTotal(); // 总分片数
String param = context.getParams(); // 参数
System.out.println(String.format("分片任务执行中:当前分片索引=%d, 总分片数=%d, 参数=%s",
shardIndex, shardTotal, param));
}
}
以下是任务调度的整体流程图:
sequenceDiagram participant Admin as 管理端 participant Executor as 执行器 participant Task as 任务 Admin->>Executor: 发起任务调度请求 Executor->>Task: 分发任务到具体处理器 Task-->>Executor: 返回任务执行结果 Executor-->>Admin: 上报任务执行状态
通过若依框架整合XXL-JOB,可以快速实现分布式任务调度功能。结合若依框架的权限管理、日志记录等功能,能够更高效地管理和监控任务执行情况。