目录
3. SpringBoot 集成 XXL-JOB 定时任务代码示例
1. 应用场景
AI 大模型的调用往往是一个高资源消耗的操作。为了减少资源消耗,限制每个用户每天对 AI 模型的调用次数变得至关重要。在这种场景下,使用定时任务每天重置调用次数是一种常见且有效的解决方案。
2. 部署 XXL-JOB
1.下载项目(使用源码运行)
https://gitee.com/xuxueli0323/xxl-job
2. 执行 SQL:
3. 修改 xxl-job-admin 项目下的数据库连接配置文件
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
4. 启动 xxl-job-admin 项目并访问
启动 xxl-job-admin 之后使用,http://localhost:8080/xxl-job-admin/toLogin ,默认登录账户:admin 密码:123456
5. 打包 xxl-job + 快捷启动
得到这个 jar 包后,就可以创建一个执行 jar 包的脚本,例如:xxl-job-start.bat 然后用记事本打开:粘贴执行 jar 包的命令:java -jar xxl-job-admin-2.4.2-SNAPSHOT.jar 。那么下次想要访问 xxl-job 的任务调度中心页面时,直接双击 .bat 文件,再拿着 http://localhost:8080/xxl-job-admin/toLogin 就可以访问了。
3. SpringBoot 集成 XXL-JOB 定时任务代码示例
3.1 添加依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.1</version>
</dependency>
3.2 添加配置
xxl:
job:
executor:
app-name: ${spring.application.name}
log-path: ${spring.application.name}/xxl-job
log-retention-days: 30 # 日志保存天数
admin:
address: http://127.0.0.1:8081/xxl-job-admin # 端口号注意使用自己的
access-token: default_token
3.3 添加执行器到Ioc容器
/**
* xxl job 配置文件: 将 xxl job 执行器注入到 Ioc 容器中
*
* @author helong
*/
@Configuration
public class XxlJobConfig {
@Value("${xxl.job.admin.address}")
private String adminAddresses;
@Value("${xxl.job.executor.app-name}")
private String appName;
@Value("${xxl.job.access-token}")
private String accessToken;
@Value("${server.port}")
private int port;
@Value("${xxl.job.executor.log-path}")
private String logPath;
@Value("${xxl.job.executor.log-retention-days}")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appName);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setPort(port + 10000);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
3.4 添加定时任务
/**
* 存放定时任务
*
* @author helong
*/
@Component
public class TimedTask {
@Resource
private IUserService userService;
@Value("${system.user.use-count}")
private Integer useCount;
/**
* 重置所有用户使用次数的定时任务
*/
@XxlJob("resetAiUseCount")
public void resetAiUseCount() {
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(User::getUsecount, useCount);
boolean result = userService.update(wrapper);
if (!result) {
// todo: 调用通知中心通知相关负责人排查和解决问题
}
}
}
3.5 控制台新增执行器
之后刷新控制台,启动 Spring Boot 客户端就能看到注册节点:
3.6 控制台添加任务
注意:多一个斜杆 / 都可能匹配不上,例如:方法里写的:@XxlJob("/resetAiUseCount"),新增任务写的 resetAiUseCount,此时是匹配不上的。
3.7 控制台开启任务
点击启动,你也可以尝试执行一次,查看调用日志。