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
排查方向
验证Cron表达式正确性
检查${application.autodepositCron}实际值是否为0 0 5 * * ?(每日凌晨5点),若表达式包含星期限制(如仅指定周一到周五),会导致周末不触发。可临时在代码中硬编码正确表达式,排除配置占位符解析问题。检查存储层状态
查询JobRunr相关数据库表:jobrunr_recurring_jobs:确认该任务的cron_expression和next_run字段,验证下次执行时间计算是否正确。jobrunr_jobs:查看未触发日期是否有对应的任务记录,是否处于失败、跳过状态。
确认Background Job Server运行状态
- 检查应用启动日志,确认
schedulerProfile已加载,且Background Job Server正常启动(日志中应有JobRunr BackgroundJobServer started相关内容)。 - 核对未触发日期内应用是否持续运行,若凌晨5点前应用宕机或重启,任务不会触发。
- 检查应用启动日志,确认
排查版本Bug
查看JobRunr官方发布日志,确认7.2.0版本是否存在定时任务触发的已知问题,若有相关修复,尝试升级到最新稳定版本测试。时区配置检查
JobRunr默认使用系统时区,若服务器时区与预期不一致,会导致触发时间偏移。可通过配置org.jobrunr.timezone=Asia/Shanghai指定时区,确保Cron表达式基于正确时区计算。
内容的提问来源于stack exchange,提问作者robberson
相关产品推荐
相关产品推荐

