首页 > 解决方案 > 是否可以在 Spring 中将假时钟传递给计划任务?

问题描述

我正在尝试测试每天运行一次的预定方法。这是xml部分

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:scheduler id="myScheduler" pool-size="10" />
<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="refillingServiceImpl" method="refill"
                    cron="0 0 21 * * *" />
</task:scheduled-tasks>
<task:executor id="myExecutor" pool-size="5"/>

方法根据我的系统时间在指定时间按预期运行。但是在应用程序中使用日期/时间的所有非计划方法都使用共享时钟实例,当我想为测试设置特定时间时——我只需更改该时钟实例。在测试之前,我将时钟设置为 20:59:50

//June 18, 2020 20:59:50 Local Time (Kiev, GMT +3), Thursday
    long offset = 1592503190 - Instant.now().getEpochSecond();
    TimeUtil.setClock(Clock.offset(Clock.system(TimeUtil.getDefaultZoneId()), Duration.ofSeconds(offset)));

,但我不知道如何说调度程序使用这个时钟而不是系统。可能吗?

标签: springtimecronscheduled-tasks

解决方案


推荐阅读