[Spring] 스케줄러 사용하기

김재연·2023년 7월 7일
0

수숙관

목록 보기
16/17
post-thumbnail

푸시알람을 위해서 매일 오후 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 어노테이션을 붙이니까 해결됐다.

이유는 아직 모르겠다. 나중에 찾아봐야지


Reference

# 스프링 @Scheduled 와 @Transactional에 얽힌 이야기

profile
일기장같은 공부기록📝

0개의 댓글