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초마다 출력" 이 나오도록 세팅하였다.

 

실행해보면

실행이 잘 되는것을 볼 수있다.

 

다음시간엔 스케쥴러를 이용해서 일정 시간마다 사진을 삭제하는 기능을 구현해보겠다.