spring - 具有多个时区的 @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..." );
}
}`
但是在函数内部,我需要知道它当前正在执行哪个时区。在此基础上,我必须完成其余的处理。但我没有找到任何相关信息。有没有办法找到这个。请告诉我。谢谢
解决方案
没有真正的方法可以正确访问该区域。
相反,您可以将您的逻辑移动到一个接受时区的私有方法中,并使用注释@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);
}
推荐阅读
- spring - 有没有办法只为特定作业跳过 Spring Batch 的持久元数据?
- python - 两列中基于年度的值比例
- python - 如何使 DRF 串行器与大写兼容
- javascript - 连接 MaterialBottomTabNavigator 和其他不属于它的屏幕
- angular - 如何运行已部署的 Angular 应用程序
- outlook - 打开其他人日历时未启用 Outlook 约会加载项
- html - 如果同一页面上没有行,则删除
- html - 如何修复没有样式的html工具提示?
- python - 如何生成具有指定长度的链接节点链?
- phpmyadmin - phpmyadmin 不允许导入/导出文件