잘자라 프로젝트에서 유저 타입은 두가지로 부모님, 아이로 되어있다.
아이는 매일 밤 열두시에 그날 수행하는 미션을 할당받는데, 이를 위해 Spring Boot에서 스케줄링 기능을 사용해야했다.
userRepository.findAllByUserType(UserType.CHILD)
으로 CHILD인 모든 아이들을 가져오고, 아이들의 MissionToday를 갱신, 생성, 삭제 3가지중 하나를 진행한다.
@Scheduled 애노테이션을 쓰면 간단하게 된다.
추가해야할 것
JaljaraApplication.class
@SpringBootApplication
@EnableJpaAuditing
@EnableScheduling //스케즐링 하려면 이 애노테이션이 필요하다.
public class JaljaraApplication {
public static void main(String[]args) {
SpringApplication.run(JaljaraApplication.class,args);
}
}
실제로 스케줄러 돌릴 메소드
@Transactional
@Scheduled(cron = "00 00 00 * * *", zone = "Asia/Seoul")
public void addMissionTodayChildren() {
List<User> allByUserType = userRepository.findAllByUserType(UserType.CHILD);
for (User user : allByUserType) {
addMissionToday(user.getId());
}
}
가장 앞에 오는 단위는 초(Seconds)이다.
두번째는 분(Minutes)을 나타낸다.
세번째는 시(Hours)를 나타낸다.
네번째는 일(Day-of-Month, DOM)을 나타낸다.
다섯번째로 월(Month)에 대한 정보를 기술한다.
여섯번째는 요일(Day of Week)을 나타낸다. 요일은 0~6의 숫자로 쓸 수도 있지만 "MON", "SUN"과 같이 요일의 약자로 사용할 수도 있다.
마지막으로 일곱번째에는 연도(Year)가 온다. 연도는 optional이다.