具有多个时区的@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);
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...