From 54ea586ece304ef2569a345c9b26b2a9b9702c8a Mon Sep 17 00:00:00 2001 From: shikeying <pxzsky@163.com> Date: 星期五, 19 一月 2024 11:11:40 +0800 Subject: [PATCH] 定时任务,修改启动不执行(当过期) --- walker-scheduler/src/test/java/com/walker/scheduler/TestScheduler.java | 28 ++++++++++++++ walker-scheduler/src/main/java/com/walker/scheduler/Option.java | 60 ++++++++++++++++++++++++++++++ walker-scheduler/src/test/java/com/walker/scheduler/EveryDayScheduler.java | 17 ++++++++ 3 files changed, 105 insertions(+), 0 deletions(-) diff --git a/walker-scheduler/src/main/java/com/walker/scheduler/Option.java b/walker-scheduler/src/main/java/com/walker/scheduler/Option.java index c8830fb..0a5abf7 100644 --- a/walker-scheduler/src/main/java/com/walker/scheduler/Option.java +++ b/walker-scheduler/src/main/java/com/walker/scheduler/Option.java @@ -56,6 +56,18 @@ private int currentTaskMonth = 0; // 鍛ㄦ湡鎬э紝褰撳墠鎵ц鍒扮殑鏈堬紝璁板綍 private int currentTaskYear = 0; // 鍛ㄦ湡鎬э紝褰撳墠鎵ц鍒扮殑骞达紝璁板綍 + public int getCurrentTaskDay() { + return currentTaskDay; + } + + public int getCurrentTaskMonth() { + return currentTaskMonth; + } + + public int getCurrentTaskYear() { + return currentTaskYear; + } + public String getTimeRangesValue() { StringBuilder s = new StringBuilder(); for(Integer[] vals : timeRanges){ @@ -110,6 +122,43 @@ this.currentTaskMonth = month; this.currentTaskDay = day; // this.currentTaskHour = hour; + + // 2024-01-18锛屼慨澶嶏細濡傛灉宸茬粡杩囦簡浠婂ぉ鏃堕棿鐐圭殑浠诲姟锛屽锛氬噷鏅�2鐐癸紝鍒欓渶瑕佽嚜鍔ㄥ垏鎹㈠埌涓嬩竴涓椂闂淬�� + // 鍚﹀垯鍑虹幇浠诲姟姘歌繙鏃犳硶鎵ц鎯呭喌銆� + if(this.isCycleTask){ + Option.TimeObject timeObj = this.isAvailableTime(System.currentTimeMillis()); + int currentHour = DateUtils.getCurrentHour(); + int currentDay = DateUtils.getCurrentYearMonthDay()[2]; + if(this.periodType == PeriodType.DAY){ + if(currentHour > hour){ + // 浠婂ぉ宸茬粡杩囦簡鏃堕棿鐐癸紝鑷姩鍒囨崲鍒颁笅涓�娆� + this.scheduleToNext(timeObj); + logger.info("浠婂ぉ宸茬粡杩囦簡鏃堕棿鐐癸紝鑷姩鍒囨崲鍒颁笅涓�娆★紝option={}", this); + } + + } else if (this.periodType == PeriodType.MONTH) { + if(currentDay > day){ + this.scheduleToNext(timeObj); + logger.info("鏈湀褰撳墠鏃ユ湡{}宸茶秴杩囪缃棩鏈焮}锛岃嚜鍔ㄥ垏鎹㈠埌涓嬩竴娆★紝option={}", currentDay, day, this); + } else if(currentDay == day && (currentHour > hour)){ + this.scheduleToNext(timeObj); + logger.info("鏈湀鏃ユ湡宸插埌杈撅紝浣嗙敱浜庢椂闂村凡杩囨湡锛屽洜姝や换鍔′細鍦ㄤ笅涓湀鎵ц锛宱ption={}", this); + } + + } else if (this.periodType == PeriodType.YEAR) { + int currentMonth = DateUtils.getCurrentYearMonthDay()[1]; + if(currentMonth > month){ + this.scheduleToNext(timeObj); + logger.info("鏈勾褰撳墠鏈堜唤{}宸茶秴杩囪缃湀浠絳}锛岃嚜鍔ㄥ垏鎹㈠埌涓嬩竴娆★紝option={}", currentMonth, month, this); + } else if (currentMonth == month && (currentDay > day)) { + this.scheduleToNext(timeObj); + logger.info("鏈勾褰撳墠鏈堜唤鐩稿悓锛屼絾褰撳墠鏃ユ湡{}宸茶秴杩囪缃棩鏈焮}锛岃嚜鍔ㄥ垏鎹㈠埌涓嬩竴娆★紝option={}", currentDay, day, this); + } else if(currentMonth == month && (currentDay == day) && currentHour > hour){ + this.scheduleToNext(timeObj); + logger.info("鏈勾褰撳墠鏈堜唤鏃ユ湡鐩稿悓锛屼絾褰撳墠鏃堕棿{}宸茶秴杩囪缃椂闂磠}锛岃嚜鍔ㄥ垏鎹㈠埌涓嬩竴娆★紝option={}", currentHour, hour, this); + } + } + } } /** @@ -454,6 +503,17 @@ } } + @Override + public String toString(){ + return new StringBuilder("[periodType=").append(this.periodType) + .append(", timeType=").append(this.timeType) + .append(", timeRanges=").append(this.timeRanges) + .append(", isCycleTask=").append(this.isCycleTask) + .append(", setYearMonthDayHour=").append(this.year).append("-").append(this.month).append("-").append(this.day).append("-").append(this.hour) + .append(", nextTime=").append(this.currentTaskYear).append("-").append(this.currentTaskMonth).append("-").append(this.currentTaskDay) + .append("]").toString(); + } + public static void main(String[] args){ /** long test = System.currentTimeMillis(); diff --git a/walker-scheduler/src/test/java/com/walker/scheduler/EveryDayScheduler.java b/walker-scheduler/src/test/java/com/walker/scheduler/EveryDayScheduler.java new file mode 100644 index 0000000..bf9e5cf --- /dev/null +++ b/walker-scheduler/src/test/java/com/walker/scheduler/EveryDayScheduler.java @@ -0,0 +1,17 @@ +package com.walker.scheduler; + +import com.walker.scheduler.impl.ForeverScheduler; + +public class EveryDayScheduler extends ForeverScheduler { + + public EveryDayScheduler(int id, String name) { + super(id, name); + } + + @Override + protected Object onProcess(Object[] inputParams) throws Exception { + logger.info("鎵ц浜嗕竴娆★紝涓嬫锛�" + this.getOption()); + return "ok"; + } + +} diff --git a/walker-scheduler/src/test/java/com/walker/scheduler/TestScheduler.java b/walker-scheduler/src/test/java/com/walker/scheduler/TestScheduler.java index c373904..72c91fb 100644 --- a/walker-scheduler/src/test/java/com/walker/scheduler/TestScheduler.java +++ b/walker-scheduler/src/test/java/com/walker/scheduler/TestScheduler.java @@ -1,11 +1,39 @@ package com.walker.scheduler; +import com.walker.infrastructure.utils.DateUtils; import com.walker.infrastructure.utils.WaitConsoleInput; import com.walker.scheduler.impl.ForeverScheduler; import org.junit.Test; public class TestScheduler { + @Test + public void testEveryDayOnce(){ + EveryDayScheduler scheduler = new EveryDayScheduler(1, "鏈烘瀯淇℃伅鍚屾"); + Option option = new Option(); +// option.setPeriodType(Option.PeriodType.DAY); +// option.setTimeType(Option.TimeType.EXACTLY); +// int[] yearMonthDay = DateUtils.getCurrentYearMonthDay(); +// // 璁剧疆姣忓ぉ鍑屾櫒3鐐规墽琛� +// int settingHour = 3; +// option.setExactlyTime(yearMonthDay[0], yearMonthDay[1], yearMonthDay[2], settingHour); +// scheduler.setOption(option); +// scheduler.start(); +// System.out.println("鍒濆鍚姩锛宱ption=" + scheduler.getOption()); + + option.setPeriodType(Option.PeriodType.MONTH); + option.setTimeType(Option.TimeType.EXACTLY); + int[] yearMonthDay = DateUtils.getCurrentYearMonthDay(); + // 璁剧疆姣忓ぉ鍑屾櫒3鐐规墽琛� + int settingHour = 3; + option.setExactlyTime(yearMonthDay[0], yearMonthDay[1], 19, settingHour); + scheduler.setOption(option); + scheduler.start(); + System.out.println("鍒濆鍚姩锛宱ption=" + scheduler.getOption()); + + WaitConsoleInput.waitInput(); + } + // @Test public void testRunIdSchedulers(){ this.createIdScheduler(2, 5000).start(); -- Gitblit v1.9.1