(@NotNull BCronTimer cronTimer, boolean missfire)
| 1066 | } |
| 1067 | |
| 1068 | public static boolean nextCronTimer(@NotNull BCronTimer cronTimer, boolean missfire) throws ParseException { |
| 1069 | // check remain times |
| 1070 | var remainTimes = cronTimer.getRemainTimes(); |
| 1071 | if (remainTimes >= 0) { |
| 1072 | if (remainTimes > 0) |
| 1073 | cronTimer.setRemainTimes(--remainTimes); |
| 1074 | if (remainTimes == 0) |
| 1075 | return false; |
| 1076 | } |
| 1077 | |
| 1078 | var nextExpectedTime = cronTimer.getNextExpectedTime(); |
| 1079 | cronTimer.setExpectedTime(nextExpectedTime); |
| 1080 | cronTimer.setHappenTimes(cronTimer.getHappenTimes() + 1); |
| 1081 | var now = System.currentTimeMillis(); |
| 1082 | cronTimer.setHappenTime(now); |
| 1083 | |
| 1084 | long baseTime; |
| 1085 | if (missfire && cronTimer.getMissfirePolicy() == eMissfirePolicyRunOnce) { |
| 1086 | // 这种策略重置时间,定时器将在新的开始时间之后按原来的间隔执行。 |
| 1087 | // cronTimer.setStartTime(now); |
| 1088 | baseTime = now; |
| 1089 | } else |
| 1090 | baseTime = nextExpectedTime; |
| 1091 | nextExpectedTime = cronNextTime(cronTimer.getCronExpression(), baseTime); |
| 1092 | cronTimer.setNextExpectedTime(nextExpectedTime); |
| 1093 | |
| 1094 | // check endTime |
| 1095 | var endTime = cronTimer.getEndTime(); |
| 1096 | return endTime <= 0 || nextExpectedTime <= endTime; |
| 1097 | } |
| 1098 | |
| 1099 | private void fireCron(long timerSerialId, int serverId, @NotNull String timerId, long concurrentSerialNo, |
| 1100 | boolean missfire) { |
no test coverage detected