单体XXL-JOB的安装及通过代码添加、开始、删除任务
因为有这样一个业务需求,系统要可以录入任务计划,并在未来的某个时间节点进行触发,来修改某一设备的状态,且只执行一次。
by:垃圾程序员
零、前言
因为有这样一个业务需求,系统要可以录入任务计划,并在未来的某个时间节点进行触发,来修改某一设备的状态,且只执行一次。
所以准备用xxl-job结合java语言来实现,网上找到一个比较不错的轮子,感谢同志!
一、安装xxl-job
在此就不做集群了,直接单体跑
1.1下载源码
通过gitee把源码下载下来,现在最新版是2.4.1了。

1.2配置参数
打开源码,你想要了解的、探索的、依赖的都在这个doc目录下。在此不做赘述了。

这里我们主要是做修改两项配置:数据库的连接地址、通讯TOKEN。其他的配置全部默认,你可以按需修改。
打开xxl-job-admin的配置文件,数据库修改为你自己的数据源信息,至于TOKEN则是用于接口鉴权和身份验证的凭证。建议你修改一下,不要用默认的。

1.3进入调度中心
直接启动项目,默认端口是8080,浏览器访问默认地址:http://localhost:8080/xxl-job-admin
默认账号:admin
默认密码:123456

1.4添加一个执行器
进入执行器管理,新增执行器即可。AppName比较关键,这是之后你程序连接到调度中心的一个重要标识。默认执行器的端口是9999。

至此,调度中心就算是完成了。
二、java对接xxl-job
新建一个项目或者在你现有项目上进行操作
2.1引入依赖
<dependency>
<groupId>com.lxgnb</groupId>
<artifactId>xxl-job-boot-starter</artifactId>
<version>2.3.0-jobinfo-executor-2</version>
</dependency>
2.2修改配置
xxl:
job:
sdk:
admin-url: http://127.0.0.1:8080/xxl-job-admin
user-name: admin
password: 123456
appname: product-replace-service
access-token: lajichengxuyuan
以下是相关的配置信息:
- admin-url: xxl-job-admin的地址,即任务调度平台的访问URL。
- user-name: 登录xxl-job-admin的用户名。
- password: 登录xxl-job-admin的密码。
- appname: 应用程序的名称,用于在任务调度平台中标识你的应用。这个和你创建的执行器的AppName要对应起来
- access-token: 访问xxl-job接口时需要携带的token,用于鉴权和身份验证。这个要和你配置的TOKEN对应起来
2.3启动项目
启动项目后,查看是否有执行器注册上来,如果如下图则表示注册进来了。

三、对应接口
注入关键类后就可以进行任务的CRUD操作了
@Autowired
private XxlJobService xxlJobService;
新建一个测试类,对外暴露接口,以下皆为示例,不代表最佳实践。
@RestController
@RequestMapping("/xxljob")
public class xxljob {
@Autowired
private XxlJobService xxlJobService;
//添加任务并运行
@PostMapping("/addTask")
@ResponseBody
public void addTask(@RequestBody Map data) {
try {
/**
customId – 自定义的唯一的业务id,此id在所有任务中保持唯一,注意:这个唯一标识被放到了负责人字段
triggerTime – 任务执行时间,必须大于当前时间
executorParam – 任务执行参数
executorHandler – 任务处理器,关联@XxlJob的value
*/
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Integer taskId = xxlJobService.addJustExecuteOnceJob("1",dateFormat.parse("2023-08-04 13:45:00"),"我是执行的参数","testHandler");
//开始运行任务
xxlJobService.start(taskId);
}catch (Exception e) {
e.printStackTrace();
}
}
//删除
@PostMapping("/deleteTask")
@ResponseBody
public void deleteTask(@RequestBody Map data) {
try {
//通过自定义的唯一的业务id获取任务的id
Integer taskId = xxlJobService.getJobIdByCustomId("1");
//删除任务
xxlJobService.remove(taskId);
}catch (Exception e) {
e.printStackTrace();
}
}
//任务处理器
@XxlJob("testHandler")
public void test() {
System.out.println("计划任务开始执行");
// 获取任务参数
String param = XxlJobHelper.getJobParam();
System.out.println("计划任务传输过来的参数 ------" + param);
}
}
3.1调用添加任务并运行接口
去调度中心查看任务,会发现已经出现了正在运行的任务

3.2在对应时间节点查看任务处理器是否被触发
在45分的時候,任务处理器被触发,并打印了我们之前填写的参数

在查看任務,已经停止了

3.3调用删除任务接口
接下来调用删除接口,在此之前还想着我们自定义的唯一的业务id吗,我们在创建任务时填写的是"1",所以代码中也写了"1",但是到你们的业务场景下,就需要你们自己定义了。

再次查看任务,会发现任务已经被删除了。
至此,一个简单的业务逻辑就实现了,你可以再次基础上增加你的业务逻辑,实现文明的递进。
多想一抬头看见你微笑的脸庞
更多推荐
https://github.com/aitxiaogang/xxl-job-admin-sdk-boot-starter
https://gitee.com/xuxueli0323/xxl-job


所有评论(0)