事实证明我无法使用@Scheduled注释,但我实施了一种解决方法。在SchedulingConfigurer的 JavaDoc 中指出:
[SchedulingConfigurer is] 通常用于设置在执行计划任务时使用的特定 TaskScheduler bean,或以编程方式注册计划任务,而不是使用 @Scheduled 注释的声明性方法。
接下来,我更改了 cron 作业以实现Runnable接口,然后更新了我的配置文件以实现SchedulingConfigurer,见下文:
@Configuration
@EnableScheduling
@ComponentScan("package.that.contains.the.runnable.job.bean")
public class JobConfiguration implements SchedulingConfigurer {
private static final String cronExpression = "0 0 14 * * *";
private static final String timeZone = "CET";
@Autowired
private Runnable cronJob;
@Bean
CronTrigger cronTrigger() {
return new CronTrigger(cronExpression, TimeZone.getTimeZone(timeZone));
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addCronTask(new CronTask(job, cronTrigger()));
}
}
请阅读@EnableScheduling的JavaDoc了解更多信息。
更新
从 Spring 4 开始,Spring Jira 问题SPR-10456已得到解决。因此,@Scheduled注释有一个新的区域属性正是为了这个目的,例如
@Scheduled(cron = "0 0 14 * * *", zone = "CET")
public void execute() {
// do scheduled job
}