====== 크론정리 ====== * description : 크론정리 * author : 오션 * email : shlim@repia.com * lastupdate : 2022-06-30 Thu \\ ====== 크론정리 ====== ===== getNextValidTimeAfter() ===== Quartz 사용 시 cron에 정의한 시간에 정상 동작하는지를 확인해야 하는 경우, Quartz에서 제공하는 CronExpression클래스를 이용.\\ @Test public void cronTimeTest() throws ParseException { // 매일 9, 12, 18시 정각에 스케줄링 동작 String cronExample = "0 0 9,12,18 * * ?"; CronExpression cronExpression = new CronExpression(cronExample); log.debug("cronExpression=[{}]", cronExpression); //cronExpression=[0 0 9,12,18 * * ?] Date nextTime1 = cronExpression.getNextValidTimeAfter(new Date()); log.debug("nextTime1=[{}]", nextTime1); //nextTime1=[2022-07-01T09:00:00.000+0900] Date nextTime2 = cronExpression.getNextValidTimeAfter(nextTime1); log.debug("nextTime2=[{}]", nextTime2); //nextTime2=[2022-07-01T12:00:00.000+0900] Date nextTime3 = cronExpression.getNextValidTimeAfter(nextTime2); log.debug("nextTime3=[{}]", nextTime3); //nextTime3=[2022-07-01T18:00:00.000+0900] Date nextTime4 = cronExpression.getNextValidTimeAfter(nextTime3); log.debug("nextTime4=[{}]", nextTime4); //nextTime4=[2022-07-02T09:00:00.000+0900] boolean compareResult = nextTime2.equals(nextTime3); assertEquals(compareResult, true); } \\ \\ @Test public void 월요정기회의() throws Exception { String cronEx = "0 59 23 ? * 2"; int dayOffset = 2; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); log.debug("cal.getTime()=[{}]", cal.getTime()); //현재 일시를 cal에 셋팅 //cal.getTime()=[2022-07-01T10:52:04.257+0900] cal.add(Calendar.DATE, dayOffset); log.debug("dayOffset=[{}], cal.getTime() after add dayOffset=[{}]", dayOffset, cal.getTime()); // 현재 일시에 dayOffset을 더한 결과 //dayOffset=[2], cal.getTime() after add dayOffset=[2022-07-03T10:52:04.257+0900] CronExpression cronExpression = new CronExpression(cronEx); log.debug("cronExpression=[{}]", cronExpression); //String으로 입력된 cronEx를 크론표현식으로 변환 //cronExpression=[0 59 23 ? * 2] Date cronDate = cronExpression.getNextValidTimeAfter(cal.getTime()); log.debug("cronDate=[{}]", cronDate); //(현재 일시+dayOffset)의 다음에 동작하는 크론 일시 표현 //cronDate=[2022-07-04T23:59:00.000+0900] String cronDateStr = dateFormat.format(cronDate); log.debug("cronDateStr=[{}]", cronDateStr); //(현재 일시+dayOffset)의 다음에 동작하는 크론 일시를 위에서 정의한 yyyyMMdd형식으로 출력 //cronDateStr=[20220704] String compareDateStr = dateFormat.format(cal.getTime()); log.debug("compareDateStr=[{}]", compareDateStr); //(현재 일시+dayoffset)를 위에서 정의한 yyyyMMdd형식으로 출력 //compareDateStr=[20220703] log.debug("cronDateStr=[{}] <<>> compareDateStr=[{}]", cronDateStr, compareDateStr); //cronDateStr=[20220704] <<>> compareDateStr=[20220703] boolean compareResult = cronDateStr.equals(compareDateStr); //boolean ret = CrontabUtil.isMatchCronExpression(cronExpression, dayOffset); assertEquals(compareResult, true); // Failure } ==== Ref LInk ==== [[http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html|QUARTZ-Cron Trigger Tutorial]]\\ [[https://lng1982.tistory.com/252|CronExpression Test하기]]\\ \\ {{tag> 오션, cron, 크론}}