Skip to content

Erupt Job 定时任务

erupt-job 提供可视化定时任务管理能力,支持 Cron 表达式配置、任务日志查看、邮件发送等功能,所有任务通过界面管理,无需重启应用。

引入方式

xml
<dependency>
  <groupId>xyz.erupt</groupId>
  <artifactId>erupt-job</artifactId>
  <version>${erupt.version}</version>
</dependency>

如需邮件发送功能,在 application.yml 中增加邮件配置:

yaml
spring:
  mail:
    username: [email protected]
    password: 123456
    host: smtp.exmail.qq.com
    port: 465
    properties:
      mail.smtp.ssl.auth: true
      mail.smtp.ssl.enable: true
      mail.smtp.ssl.required: true

配置成功并启动后,自动增加任务维护、任务日志、发送邮件菜单。

配置项

yaml
erupt:
  job:
    # 是否开启任务调度,默认 true;关闭后菜单仍在,但不会触发任何任务
    enable: true
    # 集群锁最长持有时间(毫秒),需大于任务的最长运行时间,默认 30 分钟;仅 redis-session 开启时生效
    lock-at-most-for-millis: 1800000
    # 任务结束后集群锁最短持有时间(毫秒),用于吸收实例间时钟偏差,需小于最短 cron 间隔,默认 1 秒
    lock-at-least-for-millis: 1000

功能说明

任务维护

新增定时任务,配置 Cron 表达式、处理类、任务参数,支持启用/停用:

新增任务:

任务日志

查看任务的执行时间、执行参数、返回结果、任务状态等执行记录:

日志详情:

发送邮件

application.yml 中配置的邮箱作为发送者,支持富文本内容:

定义处理类

处理类必须实现 EruptJobHandler 接口并注册为 Spring Bean:

java
@Service
public class DemoJobHandler implements EruptJobHandler {

    /**
     * 任务执行逻辑
     * @param code  任务编码(对应界面配置的任务编码)
     * @param param 任务参数(对应界面配置的任务参数)
     * @return 返回值将被记录到任务日志
     */
    @Override
    public String exec(String code, String param) {
        log.info("执行定时任务,code={}, param={}", code, param);
        // 业务逻辑...
        return "执行成功";
    }

    // 任务名称,1.12.14+ 支持,用于界面下拉显示
    @Override
    public String name() {
        return "示例定时任务";
    }

    // 默认 Cron 表达式,1.12.14+ 支持
    @Override
    public String cron() {
        return "0/10 * * * * ?";
    }
}

集群去重执行 v2.1.1+

多实例部署时,定时任务默认会在每个实例上各执行一次。开启 erupt.redis-session = true 后,erupt-job 自动启用基于 Redis 的集群锁(ShedLock),同一任务在整个集群中仅由一个节点执行,避免重复触发:

yaml
erupt:
  redis-session: true

单实例部署无需任何配置,不会引入额外开销。

在任务维护中配置

配置项说明
任务编码唯一标识,对应处理类 exec 方法的 code 参数
Cron 表达式任务执行时间规则,如 0 0 2 * * ? 表示每天凌晨 2 点
处理类从已注册的 EruptJobHandler 实现类中选择
任务参数可选,透传给处理类 exec 方法的 param 参数

贡献者

The avatar of contributor named as YuePeng YuePeng
The avatar of contributor named as Claude Opus 5 (1M context) Claude Opus 5 (1M context)

页面历史

Released under the Apache-2.0 License.