[스프링(spring)]@Scheduled(스케쥴러) (자동 반복실행, 예약실행)

allnight5·2023년 1월 12일
0

스프링

목록 보기
32/62

LocalDatetime을만들어 시간을 자동체크하기위해 Application에 @EnableJpaAuditing이 필요한것처럼
@Scheduled도 Application에 @EnableScheduling을 추가해줘야 동작한다.
@EnableScheduling // 스프링 부트에서 스케줄러가 작동하게 합니다.

@Scheduled를 사용할 메소드 위에 작성해준다.

참조사이트 1

cron 스케줄링으로 매번 예약으로 정해진 시간에 맞춰서 작동 하게한다.
크론 표현식은 스케줄을 나타내기 위한 공백으로 나누어진 6개 또는 7개의 필드로 구성된 문자열이다. (연도 표시는 옵션이다.)

<seconds> <minutes> <hours> <days of month> <months> <days of week> <years>
 ![](https://velog.velcdn.com/images/allnight5/post/53a50362-518e-4bba-a2e0-155fa5f28703/image.png)

표 끝의 특수문자의 의미도 알아보자

, : 여러 값을 추가할 때 사용한다. ex) MON, WED, FRI
- : 값의 범위를 정할 때 사용한다. ex) 10-12
* : 필드의 모든 값을 선택할 때 사용한다.
/ : 값의 증가를 설정할 때 사용한다. 예를 들어 seconds 필드에서 
    0부터 14씩 증가하는 값(0, 14, 28, 42)들을 선택할 수 있다. ex)0/14
? : 설정값 없음을 나타낸다. 
L : Last의 약어로 지정 범위의 마지막 값을 표시한다. ex)5L -> 마지막 금요일 
W : Weekday의 약어로 <days of month> 필드에서 주어진 날짜에서 
    가장 가까운 평일을 선택할 때 사용한다. 
# : N번 째 특정 요일을 설정할 때 사용한다. ex)5#2 -> 이 달의 두번째 목요일

//초,분,시,일,월,주 순서이다. *은 언제든하겠다.
// 매번 매초 실행 시키겠다.

@Scheduled(cron ="* * * * * *")

//AM 01시 10분 0초일때 실행시키겠다.
@Scheduled(cron ="0 10 1 * * *")

//1시 일때 매초 실행시키겠다.
@Scheduled(cron ="* 1 * *")

@Scheduled(fixedDelay = 1000)
fixedDelay 옵션은 이전 작업이 끝난 시점부터 x밀리초 이후마다 작업이 실행된다.
이는 1초(1000ms)에 한 번 메소드를 실행한다는 의미한다

@Scheduled(fixedRate = 1000)
옵션은 이전 작업이 수행되기 시작한 시점부터 x밀리초 이후마다 작업이 실행된다.
이는 1초(1000ms)에 한 번 메소드를 실행한다는 의미한다

fixedDelay와 fixedRate의 차이

fixedDelay는 해당 작업이 끝난 시점부터 시간을 세고, fixedRate는 해당 작업의 시작 시점부터 시간을 세기 때문에 finxedDelay의 경우 그안에서 계속 맴돌고 있다면 다시 실행하지 못하고 fixedRate의 경우 시작하고 못나와도 다시 시작한다.

@Scheduled(fixedDelay = 1000, initialDelay = 5000)
작업을 최초로 시작하기 전 대기 시간을 정하고 싶다면, initialDelay를 설정할 수 있다. 다음은 스케줄러에 메서드가 등록된 후 처음 5초를 대기하고 1초마다 메서드를 실행하는 코드다.

Parameterizing
@Scheduled 어노테이션의 설정 값을 외부에 두고, 매개변수화해서 사용할 수도 있다.
@Scheduled(fixedDelayString = "${fixedDelay.in.milliseconds}")

profile
공부기록하기

0개의 댓글