Spring - Scheduler 설정 방법 및 사용방법
일정 시간마다 실행해줘야하는 기능이 있어서 찾아보니 스프링에서 제공해주는 스프링 스케줄러를 이용하기로 했다.
스프링 스케줄러는 일정한 시간간격 또는 일정한 시각(설정가능)에 특정 로직을 돌리기 위해서 사용한다.
비슷한 기술로는 스프링쿼츠와 배치라는 기술이 있다.
스프링 스케줄러는 쿼츠와는 다르게 따로 별로의 의존성추가 작업이 필요없이 어노테이션을 이용하여 작업이 가능하다.
1. xml 설정
방법으로는 어노테이션을 사용하는 방법과 xml에 직접 기술하는 방법 두가지로 나뉜다.
위의 방법은 어노테이션 설정 방법이다.
2. Annotation 사용방법
설정이 끝났다면 스케줄러 설정이 필요한 해당 서비스에 @Scheduled 어노테이션을 붙여주고 원하는 작업을 설정 해준다.
스케줄러의 설정 값은 3가지 종류가 있다.
- cron : Cron Expression 을 통하여 설정이 가능하며, 다음과 가능 Expression 규칙을 통해서 사용한다.
아래의 사이트를 통해서 편하게 원하는 시간 설정 표현식을 얻을 수 있다.
아래의 예시는 4분마다 실행하는 cron 표현식의 값이다.
Cron format 을 보면 왼쪽부터 오른쪽 순으로 아래의 표를 참고하여 의미를 참고한다.
특수문자의 경우는 아래의 표를 참고한다.
- fixedDelay : 이전에 실행된 Task의 종료 시간으로 부터 정의된 시간만큼 지난 후 Task를 실행한다.
- fixedRate : 이전에 실행된 Task의 시작시간으로 부터 정의된 시간만큼 지난 후 Task를 실행한다.
여기서 Task란 스케줄러를 의미.
스케줄러 특징 정리.
- Spring Scheduler는 별도의 추가적인 의존성이 필요하지 않음.
- @Scheduled 어노테이션 메서드에 붙여 주기만 하면 된다.
- 해당 어노테이션의 내부 값으로 scheduler가 실행 될 타이밍을 정할 수 있음.
- scheduling을 할 메서드는 2개의 조건을 가짐
1. method는 void의 return 타입을 가져야함.
2. method는 파라미터를 가질 수 없음.
-Scheduler는 기본적으로 thread 1개를 이용하여 동기 형식으로 진행됨.
즉 1번 스케줄이 끝나지 않으면 2번 스케줄이 시작시간이 되었다고 하더라도 시작되지 않는다.
비동기 형식으로 진행하고 싶을때는 @EnableAsync 어노테이션을 이용하여 비동기로 진행도 가능.
'Spring' 카테고리의 다른 글
Spring - JUnit5을 이용한 단위 테스트 (기본 어노테이션 및 AssertJ) (0) | 2021.08.01 |
---|---|
Spring - Port 8080 is already in use 에러 해결 (0) | 2021.07.22 |
Spring - redirect 시 parameter 전달 방법 (0) | 2021.05.20 |
Spring - Transaction Propagation 속성 (0) | 2021.05.02 |
Spring - @Controller & @RestController (0) | 2021.04.20 |
댓글