개발을 하면서 매일 특정 코드가 동작해야 하는 경우가 있다.
가령 자정에 쇼핑몰 이벤트를 사용자에게 보여주기 위해 이벤트 여부가 N이었던걸 Y가 되게끔 하던가, 또는 특정 회원의 상태 변경이 자정이 되었을 때, 특정시간이 되었을 때 변경을 해야할 때 @Scheduled을 이용하면 된다.
사용방법:
1. @EnableScheduling는 작업 스케쥴러를 활성화한다.
@SpringBootApplication이 선언된 곳에 @EnableScheduling 어노테이션을 추가해 스프링 스케줄링 기능을 활성화를 시키면 된다.
하지만 나는 package로 core라는 파일을 만들고, 그 안에 scheduleConfiguration.java 클래스 파일을 생성해 빈으로 등록하였다.
그리고 ExecutorFactoryBean를 선언하여 해당 executor factory bean내에서 만들어진 Thread(thread-pool-1-thread-1)에서 Scheduler들이 호출되고, 만약 선언하지 않으면 기본 worker pool의 thread에서 Scheduler가 호출된다.(스레드에 잘 몰라 이 부분에 대해 더 알지 않았다.)
@Configuration
@EnableScheduling
public class ScheduleConfiguration {
@Bean
public ScheduledExecutorFactoryBean scheduledExecutorService() {
ScheduledExecutorFactoryBean bean = new ScheduledExecutorFactoryBean();
bean.setPoolSize(5);
return bean;
}
}
2. 로직
@component어노테이션을 한다.
그리고 cron을 사용했다. 매일 6시 36분에 todayRandom이 실행된다.
cron말고도 여러 종류가 있다.
사용방법은 아래에 있다.
@Component
public class userBatchService {
@Autowired
private UserService userService;
@Scheduled(cron = "0 36 18 * * *")
public void todayRandom() {
System.out.println("배치");
}
}
cron말고도 다양하다. 하지만 통상적으로 많이 사용하는 cron을 사용했다.
@Scheduled 옵션
fixedDelay | 이전 작업이 종료된 후 설정 시간만큼 기다린 후에 시작한다. (밀리세컨드) @Scheduled(fixedDelay = 1000) |
fixedRate | 이전 작업이 종료되지 않아도 설정된 시간마다 시작한다. (밀리세컨드) @Scheduled(fixedRate = 1000) |
initialDelay | 작업 시작 시, 설정된 시간만큼 기다린 후 시작한다. (밀리세컨드) @Scheduled(fixedRate = 1000, initialDelay = 2000) |
cron | 원하는 시간대를 설정하여 작업을 실행한다. @Scheduled(cron = "* * * * * *") (초(0-59), 분(0-59), 시간(0-23), 일(1-31), 월(1-12), 요일(1-7, 1:일, 7:토)) |
zone | 시간대를 설정 한다. 미설정 시 로컬 시간대가 적용된다. @Scheduled(cron = "* * * * * *", zone = "Asia/Seoul") |
3) cron 예제
cron 값에 특수문자를 추가해서 다양한 기간을 설정할 수 있습니다.
* : 모든 값
? : 설정 없음
, : 배열 설정 ex) 1,3,5
- : 범위 설정 ex) 3-5
/ : 특정 값을 기준으로 특정값 마다 반복
0 0 0 * * * : 매일 00시 00분 00초에 실행
0 0 2 * * MON : 월요일 새벽 2시에 실행
0/30 * * * * ? : 30초 마다 실행
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=tantis&logNo=220736701852
http://jsonobject.tistory.com/236
Spring Boot, 작업 스케쥴러 데몬 구현하기
먼저 읽어볼만한 글 IntelliJ IDEA에서 Spring Boot 웹 프로젝트 생성하기 build.gradle 작업 스케쥴러 성격의 Spring Boot 프로젝트를 새로 생성할 경우 /build.gradle 파일을 아래 내용으로 교체한다. 기존 프로
jsonobject.tistory.com
'Dev.BackEnd > Spring & Spring Boot' 카테고리의 다른 글
[스프링부트] 알림 기능(실시간 알림 받기) SSE사용 (feat lastEventId) (0) | 2023.10.07 |
---|---|
SpringBoot: @RequestParam vs @RequestBody이해하기 (0) | 2023.09.20 |
[Spring boot] 웹페이지 tiles를 사용해서 간편하게 레이아웃 설정하기 (0) | 2023.08.24 |
파일업로드 이후 파일이미지 조정을 위한 섬네일 만들기 (0) | 2023.08.19 |
Spring Boot 프로젝트 외부 경로 파일 접근하기 (0) | 2023.08.17 |