[Java]Quartz를 이용하여 스케쥴러 다음시간까지 남은시간 구하기
1. pom.xml파일에 Quartz Dependency 추가
<!-- Quartz framework --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> |
2. java의 db에서 cron expression을 받아 다음 시간에 현재 시간을 뺀다.
ex) cron expression 예시 : 0 0/1 * ? * * *
cron expression 참고사이트 : https://www.freeformatter.com/cron-expression-generator-quartz.html
final int[] TIME_UNIT = {86400, 3600, 60, 1}; final String[] TIME_UNIT_NAME = {"일 ", "시 ", "분 ", "초"}; List<Map<String, Object>> list = 매퍼명.selectXXXList(param); for(int i=0;i<list.size();i++) { if(list.get(i).get("EXPRESSION") == null || list.get(i).get("EXPRESSION") == "") { continue; } CronExpression cronExpression = new CronExpression(list.get(i).get("EXPRESSION").toString()); // 유효한 크론식일 경우 다음 실행날짜가 리턴 // 유효하지 않는 크론식일 경우 cron valid error 리턴 Date nextTime = cronExpression.getNextValidTimeAfter(new Date()); long diff = Math.abs(nextTime.getTime() - new Date().getTime()) / 1000;
// 다음 실행날짜 포맷 String tmp = ""; int remainSec = Integer.parseInt(String.valueOf(diff)); for(int j=0; j<TIME_UNIT.length; j++){ tmp += ((diff/TIME_UNIT[j])>=10?diff/TIME_UNIT[j]:"0"+diff/TIME_UNIT[j]) + TIME_UNIT_NAME[j]; diff %= TIME_UNIT[j]; }
// 남은 시간 필드에 값 추가 list.get(i).put("NEXT_VALID_DATE", tmp); } |
3. 시트에 출력한 결과
감사합니다.