我正在尝试测试一天运行一次的预定方法。
<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"/>
方法按照我的系统时间在指定的时间运行。但是所有在应用程序中使用日期/时间的非调度方法都使用共享的Clock示例,当我想设置测试的特定时间时-我只需更改Clock示例。在测试之前,我将Clock设置为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)));
,但是我不知道怎么说调度器使用这个时钟而不是系统。有可能吗?
1条答案
按热度按时间ddhy6vgd1#
通过向
ThreadPoolTaskScheduler
传递一个固定时钟来创建一个bean: