Spring Scheduler

두주·2024년 2월 12일
1

TIL

목록 보기
53/58

학습 동기

발송하고 인증되지 않은 이메일을 삭제하기 위해 스프링 스케쥴러를 사용했다.

사용 방법

1. 스케쥴러 활성화

@SpringBootApplication
@EnableJpaAuditing
@EnableScheduling
class DailywriteApplication

fun main(args: Array<String>) {
    runApplication<DailywriteApplication>(*args)
}

먼저, 메인 어플리케이션 클래스에 @EnableScheduling을 통해 스케쥴러를 활성화 시켜준다.


2. 스케쥴 설정

    @Scheduled(cron = "0 0 0 1/1 * *")

이메일이 자동으로 삭제될 수 있도록 코드를 작성했다.

@Scheduled 어노테이션을 통해 스케쥴을 입력해 준다.


Scheduled 속성

fixedDelay : milliseconds 단위로, 이전 Task의 종료 시점으로부터 정의된 시간 만큼 지난 이후 Task를 실행한다.
fixedRate : milliseconds 단위로, 이전 Task의 시작 지점으로부터 정의된 시간 만큼 지난 이후 Task를 실행한다.

fixedDelayfixedRate의 차이점은 아래와 같다.

출처 : https://jeong-pro.tistory.com/186

cron : Cron 표현식을 사용하여 작업을 예약할 수 있다.


Cron

특정 시간에 특정 작업을 예약하려는 나는 Cron을 사용해야 한다.

Cron 표현식은 무엇일까?

필드명값의 허용 범위허용된 특수문자
0 ~ 59, - * /
0 ~ 59, - * /
0 ~ 23, - * /
1 ~ 31, - * ? / L W
1 ~ 12 or JAN ~ DEC, - * /
요일0 ~ 6 or SUN ~ SAT(7도 일요일), - * ? / L #
연도empty or 1970 ~ 2099, - * /

각 자리에 위와 같은 정보를 담을 수 있다.

특수문자의 의미는 아래와 같다.

  • * : 모든 값
  • ? : 특정한 값이 없음
  • - : 범위 (MON-WED : 월요일부터 수요일까지)
  • , : 값을 지정함 (MON,WED : 월요일과 수요일만)
  • / : 시작시간 / 단위 (0/5 : 0초부터 5초 마다 계속)
  • L : 가장 마지막 (일자에서 사용할 경우 28, 30, 31일, 요일에서 사용할 경우 토요일)
  • W : 가장 가까운 평일 (20W는 20일에서 가장 가까운 평일 (월~금)을 찾음)
  • # : 몇째 주의 무슨 요일을 표현함 (6#2 : 두 번째 주 토요일)

Cron 표현식을 모두 알아야 할까?

물론 알면 좋겠지만, 툴을 사용해 간편하게 Cron 표현식을 사용할 수 있다.
내게 필요한 툴을 찾고 잘 사용하는 것도 중요한 능력 중 하나다.

Cron Maker 바로가기

결과

    @Scheduled(cron = "0 0 0 1/1 * *")
    override fun deleteMail() {

        val mailCheck = LocalDateTime.now().minusDays(2)
        mailRepository.deleteBySendDateBefore(mailCheck)

생각보다 너무 간단하게 메일 삭제 로직이 완성되었다.

JPA에도 아래와 같이 추가해 준다.
fun deleteBySendDateBefore (date: LocalDateTime)

profile
야옹.

0개의 댓글