首页 > 解决方案 > 具有多个时区的 @Schedule 注释

问题描述

大家好,

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

`@Component public class TestSchedular { private static final 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..." );
}

}`

但是在函数内部,我需要知道它当前正在执行哪个时区。在此基础上,我必须完成其余的处理。但我没有找到任何相关信息。有没有办法找到这个。请告诉我。谢谢

标签: springschedule

解决方案


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

相反,您可以将您的逻辑移动到一个接受时区的私有方法中,并使用注释@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);
}

推荐阅读