푸시알람을 위해서 매일 오후 12시마다 특정 작업을 수행할 일이 생겼다.
스프링에서는 어노테이션 추가만으로 스케줄러를 간단하게 사용할 수 있었다.
우선 @SpringBootApplication
이 붙어있는 ProjectNameApplication
에 @EnableScheduling
어노테이션을 붙여준다.
@SpringBootApplication
@EnableScheduling // <- 추가!
public class ProjectNameApplication {
public static void main(String[] args) {
SpringApplication.run(ProjectNameApplication.class, args);
}
}
그리고 스케줄러로 동작할 클래스에 @Component
와 @Transactional
을 붙이고, 스케줄러 코드에는 @Scheduled
을 붙여 cron
을 지정해주면 끝이다.
@Component
@Transactional
public class AssignmentScheduler {
@Scheduled(cron = "0 0 12 * * *") // 매일 오후 12시에 실행
public void checkDeadline() {
log.info(String.valueOf(LocalDateTime.now()));
...
}
cron 주기 설정 규칙은 여기 참고
ex) 10초마다 실행 예시
처음에 스케줄러에서 1:N 등으로 매핑된 데이터를 가져오려고 하니까 could not initialize proxy - no Session
오류가 났는데, 클래스에 @Transactional
어노테이션을 붙이니까 해결됐다.
이유는 아직 모르겠다. 나중에 찾아봐야지