Spring
Spring(scheduling)
불도정
2023. 5. 11. 18:18
이번엔 스케줄러에 대해 알아본다.
스케줄러 : Spring에서 제공하는 스케줄러는 시간에 따른 특정 작업의 순서를 지정하는 방법이다.
우선 설정부터 해보자
먼저 spring 폴더에 있는 servlet-context.xml 파일에 들어가보자
실행 후에 Source옆에 Namespaces 탭을 클릭하면
처음엔 task 체크박스에 체크가 안되어있을건데 안되어있다면 체크를 해주자
그후엔 <beans:beans> 태그안에 <task:annotation-driven/>을 작성해준다
주석에 쓰인바와 같이 @Scheduled 어노테이션 인식을 위해 태그를 추가한 것이다.
이제 준비는 끝났고 테스트를 해보기 전에 @Scheduled의 속성에 대해 알아보자
- fixedDelay : 이전 작업이 끝난 시점으로 부터 고정된 시간(ms)을 설정.
- fixedRate : 이전 작업이 수행되기 시작한 시점으로 부터 고정된 시간(ms)을 설정.
- cron : UNIX계열 잡 스케쥴러 표현식으로 작성해준다
=> cron="초 분 시 일 월 요일 [년도]" ※요일은 1(SUN) ~ 7(SAT) 순이다.
ex) 2023년 5월 10일 수요일 10시 30분 20초 => cron ="20 30 10 10 5 3" (연도 생략 가능)
* 특수문자 *
* : 모든 수
- : 두 수 사이의 값. ex) 10-15 -> 10이상 15이하
, : 특정 값 지정. ex) 3,4,7 -> 3,4,7 지정
/ : 값의 증가. ex) 0/5 -> 0부터 시작하여 5마다
? : 특별한 값이 없음. (월, 요일만 해당)
L : 마지막. (월, 요일만 해당)
** 주의할 점은 @Schesuled 어노테이션은 매개변수가 없는 메소드에만 적용 가능하다 **
그럼 테스트를 진행해보자
대충 기존에 만든 패키지에 scheduling 패키지를 만들어 SchedulingTest 클래스를 만들었다
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class SchedulingTest {
private Logger logger = LoggerFactory.getLogger(SchedulingTest.class);
@Scheduled(fixedRate = 5000)
public void test() {
logger.info("5초마다 출력");
}
}
@Component 어노테이션으로 일정 시간마다 스프링이 알아서 코드를 수행할 수있도록 bean으로 등록한다
콘손창에 로그를 보여주기위해 logger 생성
@Scheduled 어노테이션 괄호안에 (fixedRate = 5000)을 작성해준다
뜻은 5초에 한번 실행한다는 ㄸ스
로그엔 5초마다 실행될때마다 "5초마다 출력" 이 나오도록 세팅하였다.
실행해보면
실행이 잘 되는것을 볼 수있다.
다음시간엔 스케쥴러를 이용해서 일정 시간마다 사진을 삭제하는 기능을 구현해보겠다.