创建XXL-JOB任务调度

XXL-JOB

在当前的Java微服务系统中,活动开始前提醒是通过配置XXL-JOB定时任务来实现的,该任务每分钟扫描一次,检查当前时间是否在活动开始前的指定时间段内。为了优化这一业务流程,我们希望在创建活动时直接生成一个指定时间的定时任务,从而减少不必要的数据库查询并提高系统的效率。

具体来说,需要在创建活动时计算出提醒的具体时间,并通过调用XXL-JOB的API动态创建一个定时任务。这样可以在活动创建时就确定好提醒的时间点,避免频繁的扫描操作。

# 一、添加依赖

确保你的项目中包含了 XXL-JOB 的客户端依赖。如果使用 Maven,可以在 pom.xml 中添加如下依赖:

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>
1
2
3
4
5

# 二、配置 XXL-JOB 客户端

在你的应用配置文件(如 application.ymlapplication.properties)中配置 XXL-JOB 客户端参数。

xxl:
  job:
    admin:
      addresses: http://127.0.0.1:8080/xxl-job-admin
    executor:
      appname: your-app-name
      ip: 
      port: 9999
      logpath: /data/applogs/xxl-job/jobhandler
      logretentiondays: 30
1
2
3
4
5
6
7
8
9
10

# 三、创建活动并生成定时任务

在创建活动的方法中,调用 XXL-JOB 的 API 来创建一个新的定时任务。

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam;
import com.xxl.job.core.util.XxlJobDynamicScheduler;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class ActivityService {

    public void createActivity(Activity activity) {
        // 保存活动基本信息到数据库
        saveActivity(activity);

        // 计算提醒时间
        LocalDateTime reminderTime = activity.getStartTime().minusHours(1); // 假设提前1小时提醒
        Date triggerTime = Date.from(reminderTime.atZone(ZoneId.systemDefault()).toInstant());

        // 创建定时任务
        TriggerParam triggerParam = new TriggerParam();
        triggerParam.setJobId(1); // 你需要为这个提醒任务分配一个固定的jobId
        triggerParam.setExecutorHandler("activityReminderHandler"); // 对应执行器中的任务处理器
        triggerParam.setTriggerTime(triggerTime.getTime());

        // 调用XXL-JOB API创建定时任务
        ReturnT<String> result = XxlJobDynamicScheduler.triggerJob(triggerParam);
        if (result.getCode() == 200) {
            System.out.println("定时任务创建成功");
        } else {
            System.err.println("定时任务创建失败: " + result.getMsg());
        }
    }

    private void saveActivity(Activity activity) {
        // 保存活动到数据库的逻辑
    }
}
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

# 四、配置任务处理器

在你的 XXL-JOB 执行器中,配置一个任务处理器来处理提醒逻辑。

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

@Component
public class ActivityReminderJobHandler {

    @XxlJob("activityReminderHandler")
    public ReturnT<String> execute(String param) {
        // 提醒逻辑
        System.out.println("活动提醒: " + param);
        return ReturnT.SUCCESS;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 参考资料

XXL-JOB调度中心与执行器通讯过程源码理解:https://blog.csdn.net/it_boy_elite/article/details/138980389

最近修改于: 2024/10/14 16:14:57
和宇宙温柔的关联
房东的猫