JeecgBoot任务调度:Quartz分布式任务管理

JeecgBoot任务调度:Quartz分布式任务管理

【免费下载链接】jeecg-boot jeecgboot/jeecg-boot 是一个基于 Spring Boot 的 Java 框架,用于快速开发企业级应用。适合在 Java 应用开发中使用,提高开发效率和代码质量。特点是提供了丰富的组件库、模块化架构和自动化配置方式。 【免费下载链接】jeecg-boot 项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot

你是否还在为企业级应用中的定时任务管理烦恼?服务器集群环境下任务重复执行、任务状态监控困难、动态调整计划繁琐?JeecgBoot基于Quartz框架提供的分布式任务调度解决方案,通过可视化管理界面与自动化配置机制,让任务调度变得简单高效。本文将带你从零开始掌握JeecgBoot任务调度核心功能,解决分布式环境下的任务管理痛点。

一、Quartz任务调度核心架构

JeecgBoot的任务调度模块采用"数据库存储+集群协调"架构,通过Quartz框架实现分布式任务的统一管理。核心组件包括:

  • 任务控制器:提供RESTful API接口,处理任务CRUD与状态流转
  • 服务实现层:封装Quartz调度器操作,实现任务生命周期管理
  • 数据访问层:基于MyBatis-Plus实现任务元数据持久化
  • 实体模型:映射数据库表结构,存储任务配置与运行状态

核心代码结构如下:

org.jeecg.modules.quartz
├── controller/QuartzJobController.java  // 任务管理API
├── service/IQuartzJobService.java       // 任务服务接口
├── service/impl/QuartzJobServiceImpl.java // 服务实现
├── entity/QuartzJob.java                // 任务实体
└── mapper/QuartzJobMapper.java          // 数据访问

任务调度核心流程: mermaid

二、任务管理核心功能实现

2.1 任务CRUD操作

JeecgBoot提供完整的任务生命周期管理接口,通过QuartzJobController实现RESTful API。关键接口包括:

  • 分页查询:支持多条件过滤任务列表
@RequestMapping(value = "/list", method = RequestMethod.GET)
public Result<?> queryPageList(QuartzJob quartzJob, 
                              @RequestParam(defaultValue = "1") Integer pageNo,
                              @RequestParam(defaultValue = "10") Integer pageSize, 
                              HttpServletRequest req) {
    QueryWrapper<QuartzJob> queryWrapper = QueryGenerator.initQueryWrapper(quartzJob, req.getParameterMap());
    Page<QuartzJob> page = new Page<>(pageNo, pageSize);
    IPage<QuartzJob> pageList = quartzJobService.page(page, queryWrapper);
    return Result.ok(pageList);
}
  • 创建任务:保存任务配置并立即调度
@RequiresPermissions("system:quartzJob:add")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public Result<?> add(@RequestBody QuartzJob quartzJob) {
    quartzJobService.saveAndScheduleJob(quartzJob);
    return Result.ok("创建定时任务成功");
}
  • 更新任务:同步修改调度计划
@RequiresPermissions("system:quartzJob:edit")
@RequestMapping(value = "/edit", method ={RequestMethod.PUT, RequestMethod.POST})
public Result<?> eidt(@RequestBody QuartzJob quartzJob) {
    try {
        quartzJobService.editAndScheduleJob(quartzJob);
    } catch (SchedulerException e) {
        return Result.error("更新定时任务失败!");
    }
    return Result.ok("更新定时任务成功!");
}

2.2 任务状态管理

系统支持任务的动态启停控制,通过权限控制确保操作安全性:

  • 暂停任务
@RequiresPermissions("system:quartzJob:pause")
@GetMapping(value = "/pause")
public Result<Object> pauseJob(@RequestParam String id) {
    QuartzJob job = quartzJobService.getById(id);
    quartzJobService.pause(job);
    return Result.ok("停止定时任务成功");
}
  • 恢复任务
@RequiresPermissions("system:quartzJob:resume")
@GetMapping(value = "/resume")
public Result<Object> resumeJob(@RequestParam String id) {
    QuartzJob job = quartzJobService.getById(id);
    quartzJobService.resumeJob(job);
    return Result.ok("启动定时任务成功");
}
  • 立即执行:支持任务的即时触发,不影响原调度计划
@RequiresPermissions("system:quartzJob:execute")
@GetMapping("/execute")
public Result<?> execute(@RequestParam String id) {
    QuartzJob quartzJob = quartzJobService.getById(id);
    quartzJobService.execute(quartzJob);
    return Result.ok("执行成功!");
}

2.3 分布式任务协调

在集群环境下,JeecgBoot通过数据库锁机制实现任务的分布式协调,确保同一任务在多节点环境下仅执行一次。核心实现位于QuartzJobServiceImpl:

@Transactional
public boolean saveAndScheduleJob(QuartzJob quartzJob) {
    quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0);
    boolean success = this.save(quartzJob);
    if (success && CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) {
        scheduleJob(quartzJob);  // 调度任务
    }
    return success;
}

三、任务配置与使用指南

3.1 任务实体结构

任务配置信息通过QuartzJob实体映射,关键属性包括:

@TableName("sys_quartz_job")
public class QuartzJob {
    @TableId(type = IdType.ASSIGN_ID)
    private String id;                // 任务ID
    private String jobClassName;      // 任务类名
    private String jobName;           // 任务名称
    private String jobGroup;          // 任务组名
    private String cronExpression;    // Cron表达式
    private String parameter;         // 执行参数
    private String description;       // 任务描述
    @Dict(dicCode = "quartz_status")
    private String status;            // 任务状态(0-正常,1-暂停)
    // getter/setter省略
}

3.2 任务开发步骤

  1. 创建任务类:实现Job接口,编写业务逻辑
public class SendMsgJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 任务执行逻辑
        log.info("定时发送消息任务执行...");
    }
}
  1. 配置任务:通过界面或API创建任务,设置:

    • 任务类名:org.jeecg.modules.message.job.SendMsgJob
    • Cron表达式:0 0/30 * * * ? (每30分钟执行一次)
    • 任务状态:正常(启动)或暂停
  2. 部署与监控:任务自动注册到调度器,可通过列表页监控执行状态

3.3 Cron表达式示例

常用调度计划配置:

表达式含义
0 0 12 * * ?每天中午12点执行
0 0/30 9-17 * * ?工作日9-17点每30分钟执行
0 0 1 * * ?每天凌晨1点执行
0 0 1 1 * ?每月1号凌晨1点执行

四、核心代码与模块路径

五、总结与最佳实践

JeecgBoot的Quartz任务调度模块通过标准化的接口设计与分布式协调机制,解决了企业级应用中任务管理的核心痛点。在实际使用中,建议:

  1. 合理规划任务组:通过jobGroup对任务进行分类管理
  2. 优化Cron表达式:避免密集型任务影响系统性能
  3. 添加日志监控:在任务执行前后记录关键日志,便于问题排查
  4. 定期备份任务配置:通过导出Excel功能备份任务配置

通过JeecgBoot任务调度模块,开发者可以快速构建可靠的分布式任务系统,专注于业务逻辑实现而非调度框架搭建。立即体验JeecgBoot,让任务管理变得简单高效!

点赞+收藏+关注,获取更多JeecgBoot实战教程。下期预告:《JeecgBoot代码生成器高级用法》

【免费下载链接】jeecg-boot jeecgboot/jeecg-boot 是一个基于 Spring Boot 的 Java 框架,用于快速开发企业级应用。适合在 Java 应用开发中使用,提高开发效率和代码质量。特点是提供了丰富的组件库、模块化架构和自动化配置方式。 【免费下载链接】jeecg-boot 项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值