请描述 Spring 框架中 @Scheduled 注解的用途及其常见的配置属性。
考察说明
考查候选人对 Spring 定时任务注解的理解和基本使用能力。
回答思路
- 【回答框架 1】@Scheduled 是 Spring 提供的用于声明方法为定时任务的注解,通过注解驱动的方式简化了定时任务的实现,无需手动编写线程或调度逻辑。
- 【回答框架 2】使用时需要配合 @EnableScheduling 开启调度支持,并可在注解中配置 cron、fixedDelay、fixedRate 等属性来定义触发规则。
- 【回答框架 3】fixedRate 表示固定频率执行,即上一次开始执行后,经过指定时间后立即开始下一次;fixedDelay 表示上一次执行结束后,再经过指定延迟后执行下一次;cron 表达式则支持更复杂的调度规则。
- 【回答框架 4】实际开发中,定时任务默认在单线程调度器中执行,若存在长任务或并发需求,需要考虑配置合适的线程池或进行异步处理,以避免任务阻塞和资源竞争。
- 【关键点 1】@Scheduled 注解用于标记方法为定时任务,需配合 @EnableScheduling 生效。
- 【关键点 2】主要属性包括 cron、fixedDelay、fixedRate 和 initialDelay,分别控制触发的时机和延迟。
- 【关键点 3】fixedRate 和 fixedDelay 的执行时机不同,fixedRate 基于任务开始时间计算,fixedDelay 基于任务完成时间计算。
- 【关键点 4】默认调度器为单线程,长任务或高并发场景下需考虑线程池配置或异步执行。
- 【易错点 1】固定频率下,如果任务执行时间超过周期,实际执行会延后,可能与预期不符。
- 【易错点 2】不区分 fixedRate 与 fixedDelay 的差异,容易导致调度行为与需求不一致。
- 【易错点 3】未配置线程池时,多个定时任务可能排队执行,导致阻塞和资源竞争。