具有多个时区的@Schedule注释

问题描述

HiTeam,

我有一个要求,我必须在9 PM的同一时间运行具有多个时区的计划任务。我使用了@Schedule批注并添加了可重复的@Schedule批注。此单个文件在两个时区中运行在晚上9点下面是代码

`@Component 公共课程TestSchedular { 私有静态最终Logger logger = LoggerFactory.getLogger(TestSchedular.class);

@Scheduled(cron= "0 0 21 * * ?",zone = "GMT+4")
@Scheduled(cron= "0 0 21 * * ?",zone = "GMT+3")
public void scheduleFixedrateTask() throws Exception {
    
    logger.info("Schedular started..." );
}

}`

但是在函数中我需要知道它当前在哪个时区执行。在此基础上,我必须做其余的处理。但是我对此一无所获。 有什么办法可以找到这个。请让我知道。 谢谢

解决方法

没有真正的方法可以正确访问区域。

您可以将逻辑移到接受时区的私有方法中,并使用两个带有@Scheduled批注的方法,并将相应的时区传递给该方法:

private static final String GMT_PLUS_3 = "GMT+3";
private static final String GMT_PLUS_4 = "GMT+4";

@Scheduled(...,zone = GMT_PLUS_3)
public void scheduleGmt3() { 
    task(GMT_PLUS_3); 
}

@Scheduled(...,zone = GMT_PLUS_4)
public void scheduleGmt4() { 
    task(GMT_PLUS_4); 
}

private void task(String timeZone) {
    logger.info("Task started for time zone '{}'",timeZone);
}