问题描述
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);
}