Java月度调度程序

时间:2018-01-31 20:54:37

标签: java datetime junit

我的调度要求很小 配置每月间隔的批处理作业。

说,如果作业开始时间是2017年1月5日,间隔是1个月,它将在以下日期运行作业。

  

1月5日,2月5日,3月5日,....

当应用程序停机一段时间并且当它出现时,我正在计算下一个运行时间,如下所示。

每月工作,

(ChronoUnit.MONTHS.between(jobStTime, currentTime) + 1;

它将返回到目前为止的运行次数,

对于前,

  

(ChronoUnit.MONTHS.between("Jan 5th 2017", "Jan 20th 2018") + 1;   将返回13。

现在,下一次运行计算如下。

jobStTime.plusMonths(13);

对于前,

  

" 2017年1月5日" .plusMonths(13)将于2018年2月5日返回。

希望,逻辑上没有任何缺陷。

现在,问题在于单元测试。

我有一个单元测试如下测试每月的工作。

日期jobDate = currentDate.minusMonths(2); 日期currentDate = currentDate.minusHour(1);

说,

测试案例1: -

单元测试正在" 2018年1月20日上午10点 - >运行的currentdate。

工作日期为" 2017年11月20日上午10点" currentDate for testing将于2018年1月20日上午9点开始。

所以,现在跳过计算将是,

  

(ChronoUnit.MONTHS.between(" 2017年11月20日上午10点"," 2018年1月20日)   上午9点")+ 1; - > 2

这很好,下一次运行将是,

  

" 2017年11月20日10 AM" .plusMonths(2) - > " 2017年1月20日10 AM"

测试案例2: - 这就是问题所在。

单元测试在" 2018年1月31日上午10点 - >运行的currentdate。

工作日期为" 2017年11月30日上午10点" currentDate for testing将于2018年1月31日上午9点开始。

所以,现在跳过计算将是,

  

(ChronoUnit.MONTHS.between(" 2017年11月30日上午10点"," 2018年1月31日)   上午9点")+ 1; - > 3

下一次运行将是,

  

" 2017年11月30日10 AM" .plusMonths(3) - > " 2017年3月30日上午10点"

因此,单元测试在本月31日运行时失败。

除了在单元测试代码中处理第31个问题之外,还有其他解决方案吗?

由于

0 个答案:

没有答案