728x90
반응형
@Scheduled 란?
Spring에서는 @Scheduled 어노테이션을 이용해 특정 시각에 혹은 일정 시간 간격마다 함수를 호출할 수 있다.
사용법
@EnableScheduling
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
먼저 @EnableScheduling 어노테이션을 Application 클래스에 추가한다.
@Service
public class TestService {
//매일 아침 8시 실행
@Scheduled(cron = "0 0 8 * * *")
public void testSchedule() {
System.out.println("아침 8시에 실행!");
}
}
다음으로 @Service를 사용해 스프링 빈에 추가된 클래스에 있는
함수의 위에 @Scheduled 어노테이션을 추가하고 괄호 안에 속성을 넣어준다.
물론 @Service가 아니더라도 @Component나 @Configuration과 @Bean을 이용하는 등
스프링 빈에 추가되어만 있으면 된다.
주의할 점은 파라미터가 있으면 안된다.
속성 설정하는 법
1. fixedRate : 이전 작업이 시작한 시간에서 설정한 시간이 지난 뒤에 함수를 호출한다.
@Scheduled(fixedRate = 1000)
public void test() {
System.out.println("이전 작업 시작 후 1초 마다 실행");
}
2. fixedDelay : 이전 작업이 종료된 시간에서 설정한 시간이 지난 뒤에 함수를 호출한다.
@Scheduled(fixedDelay = 1000)
public void test() {
System.out.println("이전 작업 종료 후 1초 마다 실행");
}
3. initialDelay : initialDelay 만큼 지연된 후 실행한다.
@Scheduled(fixedRate = 2000, initialDelay = 1000)
public void test() {
System.out.println("이전 작업 시작 후 1초가 지연되고 2초 마다 실행");
}
@Scheduled(fixedDelay = 2000, initialDelay = 1000)
public void test2() {
System.out.println("이전 작업 종료 후 1초가 지연되고 2초 마다 실행");
}
4. cron : cron 표현식을 통해 속성을 설정할 수 있다.
@Scheduled(cron = "* * * * * *")
public void test() {
System.out.println("cron 방식으로 실행");
}
총 6개의 *을 볼 수 있다.
순서대로 초, 분, 시간, 일, 월 , 요일 을 나타낸다.
- * : 모두 허용 (매초, 매분, 매일, 매주, 매월)
- ? : 설정 값 없음
- - : 범위 설정
- , : 여러 값을 설정
- / : 증가하는 값 설정 (초에서 0/10이라면 0초 부터 10초 씩 증가)
- L : 마지막 (날짜와 요일에서만 사용가능하며 날짜일 경우 마지막 날짜, 요일일 경우 마지막 요일)
- W : 가장 가까운 평일
예시
@Scheduled(cron = "0 0 18 * * *")
public void test() {
System.out.println("매일 오후 18시에 실행");
}
@Scheduled(cron = "0 0 12 15,30 * ?")
public void test() {
System.out.println("매달 15일,30일 12시에 실행(요일을 비워야 15, 30에만 실행)");
}
@Scheduled(cron = "0 0 0/1 * * *")
public void test() {
System.out.println("1시간 마다 실행");
}
@Scheduled(cron = "0 0/10 6-12 * * *")
public void test() {
System.out.println("매일 6시 부터 12시 까지 10분 마다 실행");
}
@Scheduled(cron = "0 30 17 1 * *")
public void test() {
System.out.println("매달 1일 17시 30분에 실행");
}
다른 많은 방식들이 있지만 아직 사용해보지 않아 좀 더 공부가 필요할 것 같다.
728x90
반응형
'개념 정리 > Spring' 카테고리의 다른 글
[Spring] JUnit5에서 예외테스트 하기 (0) | 2023.07.29 |
---|---|
[Spring] ShedLock을 통해 서버간 스케줄 중복 수행 방지 (0) | 2023.07.29 |
[Spring Security] 기본 로그인 화면 제거 (0) | 2023.07.23 |
[Spring] UUID와 increment PK를 언제 사용할까? (0) | 2023.07.19 |
[Spring] 스프링 DTO (0) | 2023.07.03 |