Spring Scheduler
오늘은 바로 코드부터 공개한다.
@Slf4j
@Component
public class SchedulerController extends CommonController {
@Autowired
SchedulerService schedulerService;
@Autowired
RegistService registService;
@Autowired
AttendanceService attendanceService;
@Scheduled(cron = "0 5 0 * * *")
//@Scheduled(cron = "0/5 * * * * *")
public void sampleSchedule() throws ParseException {
System.err.println("<==================================스케줄 테스트=====================================>");
Map paramMap = new HashMap<>();
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String today = date.format(formatter);
DayOfWeek dayOfweek = date.getDayOfWeek();
paramMap.put("DATE", today);
paramMap.put("DAY", dayOfweek.getDisplayName(TextStyle.NARROW, Locale.KOREAN));
List<Record> userList = schedulerService.getUserList(paramMap);
List<Record> attendanceList = null;
Map map = new HashMap();
for (int i = 0; i < userList.size(); i++) {
userList.get(i).put("DATE", today);
userList.get(i).put("DAY", dayOfweek.getDisplayName(TextStyle.NARROW, Locale.KOREAN));
if(userList.get(i).get("REGIST_SEAT") != null) {
registService.attendanceInsert(userList.get(i));
}
map = getAttendanceMap(schedulerService.getAttendanceList(userList.get(i)));
map.put("ATTENDANCE_DATE", today);
attendanceService.attendanceUpdate(map);
}
}
위 코드와 같이 scheduler를 사용한다.
Spring Scheduler란 Spring에서 제공하는 기능이다.
이 기능은 개발자가 작성 해놓은 시각 혹은 시간마다 자동으로 함수가 실행되는 기능이다.
Spring Scheduler를 사용하려면
우선 프로젝트 main 함수에 @EnableSechduling 어노테이션을 등록해야한다.
@EnableScheduling
@SpringBootApplication
public class WssdApplication {
public static void main(String[] args) {
SpringApplication.run(WssdApplication.class, args);
}
}
@Scheduled(cron= "0 5 0 * * *") 이 어노테이션은 스케줄이 실행되는 시각 혹은 시간을 설정하는 어노테이션으로
cron 정규식으로 설정한다. (cron 정규식은 구글에 너무나 많은 정보가 나와있다.)
본인이 설정한 시각은 매년 매월 매일 00 시 05분에 스케줄이 작동한다.
그리고 본인이 스케줄을 돌리고 싶은 기능을 잘 작성하면된다.
매일 자동으로 실행 되어야하는 기능 혹은 매주 매달 매년 실행 되어야하는 기능들을 사용할 때 아주 유용하게 사용될 거 같다.