Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

怎样选择任务调度方式与触发规则?

查看完整题解

参考回答

直接回答

简单进程内周期任务可用Scheduled,需持久触发和更复杂计划可评估Quartz等;跨实例分工与恢复则还要分布式协调。选择依据是错过触发怎么办、是否允许重叠、如何补跑和重试,而不是只看能否写一条cron表达式。

讲清原理

Spring cron常用秒到星期的六字段,并可指定时区;夏令时和日历边界可能影响触发,表达式正确不等于每个日期都有同样次数。fixedDelay与fixedRate也要结合具体调度器与执行方式理解。

任务参数和计划变更需有可追踪来源,失败不能无限快速重试。依赖数据库的工作要给每批明确提交与恢复边界,运行时长指标比“定时器创建成功”更有意义。

相同定时声明可在两个应用实例分别注册
相同定时声明可在两个应用实例分别注册

例子与易错点

先测试固定日期的下一触发时间、无效表达式和幂等重跑,再做实际调度集成。不要靠测试里睡几秒等碰巧执行一次,或把单机计时器当作全局调度平台。

以下为 Java 21 类成员示例,放入同一外部类中使用,依赖 Boot4.1.2 / Framework7.0.10。固定北京时间计算下一次触发;不是时钟驱动调度或夏令时全量验收。

static java.time.ZonedDateTime nextMorning(java.time.ZonedDateTime now) {
    return org.springframework.scheduling.support.CronExpression.parse("0 0 8 * * *").next(now);
}

相关题:第 32 题、第 45 题、第 62 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。