You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JobRunr每日定时任务未按时触发问题排查求助

JobRunr每日定时任务未按预期触发问题排查

我使用JobRunr创建了一个每日凌晨5点触发的定时任务,但上周仅周一、周二、周五正常执行,周三、周四、周六、周日均未触发。JobRunr控制台显示任务配置为每日5点触发,需确认该问题是JobRunr的Bug还是代码配置问题。

以下是相关配置代码:

pom.xml依赖

<dependency>
    <groupId>org.jobrunr</groupId>
    <artifactId>jobrunr-spring-boot-3-starter</artifactId>
    <version>7.2.0</version>
</dependency>

JobRunr配置类

import javax.sql.DataSource;
import org.jobrunr.configuration.JobRunr;
import org.jobrunr.configuration.JobRunrConfiguration.JobRunrConfigurationResult;
import org.jobrunr.jobs.mappers.JobMapper;
import org.jobrunr.scheduling.JobScheduler;
import org.jobrunr.storage.StorageProvider;
import org.jobrunr.storage.sql.common.SqlStorageProviderFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
@Profile(value = {"scheduler"})
public class JobRunrConfig {

  @Bean
  public StorageProvider storageProvider(DataSource dataSource, JobMapper jobMapper) {
    StorageProvider storageProvider = SqlStorageProviderFactory.using(dataSource);
    storageProvider.setJobMapper(jobMapper);
    return storageProvider;
  }

  @Bean
  public JobScheduler jobScheduler(StorageProvider storageProvider) {
    return new JobScheduler(storageProvider);
  }

  @Bean
  public JobRunrConfigurationResult jobRunr(StorageProvider storageProvider) {
    return JobRunr.configure()
        .useStorageProvider(storageProvider)
        .useDashboardIf(true)
        .useBackgroundJobServer()
        .initialize();
  }
}

定时任务代码

import java.time.LocalDateTime;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jobrunr.jobs.annotations.Job;
import org.jobrunr.jobs.annotations.Recurring;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Component
@Slf4j
@RequiredArgsConstructor
@Profile(value = {"scheduler"})
public class AutoDepositJobSchedule {

  @Recurring(id = "auto-recurdeposit-job", cron = "${application.autodepositCron}")
  @Job(name = "Auto job")
  public void executeAutoPresentations() {
    log.info("job runr  Triggered AT" + LocalDateTime.now());

    try {
      // 业务逻辑执行
    } catch (Exception e) {
      log.error("Error while job execution", e);
    }

  }
}

额外配置文件(application-scheduler.properties)

org.jobrunr.background-job-server.enabled: true

排查方向

  1. 验证Cron表达式正确性
    检查${application.autodepositCron}实际值是否为0 0 5 * * ?(每日凌晨5点),若表达式包含星期限制(如仅指定周一到周五),会导致周末不触发。可临时在代码中硬编码正确表达式,排除配置占位符解析问题。

  2. 检查存储层状态
    查询JobRunr相关数据库表:

    • jobrunr_recurring_jobs:确认该任务的cron_expression和next_run字段,验证下次执行时间计算是否正确。
    • jobrunr_jobs:查看未触发日期是否有对应的任务记录,是否处于失败、跳过状态。
  3. 确认Background Job Server运行状态

    • 检查应用启动日志,确认schedulerProfile已加载,且Background Job Server正常启动(日志中应有JobRunr BackgroundJobServer started相关内容)。
    • 核对未触发日期内应用是否持续运行,若凌晨5点前应用宕机或重启,任务不会触发。
  4. 排查版本Bug
    查看JobRunr官方发布日志,确认7.2.0版本是否存在定时任务触发的已知问题,若有相关修复,尝试升级到最新稳定版本测试。

  5. 时区配置检查
    JobRunr默认使用系统时区,若服务器时区与预期不一致,会导致触发时间偏移。可通过配置org.jobrunr.timezone=Asia/Shanghai指定时区,确保Cron表达式基于正确时区计算。

内容的提问来源于stack exchange,提问作者robberson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:32:31