[Spring] Scheduled 어노테이션

2024. 10. 30. 09:17·Spring

@Scheduled

해당 어노테이션을 활용하면 일정 시간 간격 혹은 특정 시간에 원하는 메소드를 실행하도록 해주는 어노테이션이다.

 

사용법

나같은 경우에는 실제로 원하는 디렉토리의 파일들을 최종 수정시간과 현재 시간을 비교하여 특정 시간만큼 차이가 나면 삭제시키도록 하는 기능을 만들어야 했다.

 

우선 @Scheduled를 사용하기 위해서는 Application 파일에 @EnableScheduling 를 추가해줘야 한다.(나 Scheduled 쓴다~ 하고 선언하는 것)

 

그리고는 @Scheduled를 적용할 클래스를 만드는데

@Component
public class FileClean { 

	@Scheduled(fixedRate = 60 * 60 * 1000) // 1시간마다 실행
	public void run() {        
		System.out.println("Scheduled TEST");    
	}
    
}

 

주의할 점은 @Component 혹은 @Service와 같이 빈에 등록된 클래스여야만 한다.

 

이렇게만 해주면 설정은 끝이고 조금의 규칙이 있다.

 

1. 메소드 리턴 타입은 void여야 함

2. 메소드에 파라미터 사용 불가능

 

또한, Scheduled의 속성으로는

@Scheduled(fixedDelay = 1000) //milliseconds 단위로, 이전 Task의 종료 시점으로부터 정의된 시간만큼 지난 후 Task를 실행

@Scheduled(fixedDelay = "1000") //fixedDelay와 같은데 문자열로 값을 표현하겠다는 의미

@Scheduled(fixedRate = 1000) //milliseconds 단위로, 이전 Task의 시작 시점으로부터 정의된 시간만큼 지난 후 Task를 실행

@Scheduled(fixedRateString = "1000") //fixedRate와 같은데 문자열로 값을 표현하겠다는 의미

 

fixedRate는 작업의 수행시간과 상관 없이 일정 주기마다 메소드를 호출하는 것.

fixedDelay는 작업을 마친 후부터 타이머가 돌아 메소드를 호출하는 것.

 

 

그리고 cron 표현식을 사용하여 작업을 예약할 수도 있다.

@Scheduled(cron = "* * * * * *")

이는 첫 번째 "*"부터 

초(0-59) 
분(0-59) 
시간(0-23) 
일(1-31) 
월(1-12) 
요일(0-6) (0: 일, 1: 월, 2:화, 3:수, 4:목, 5:금, 6:토)
* : 모든 조건(매시, 매일, 매주처럼 사용)을 의미
 
? : 설정 값 없음 (날짜와 요일에서만 사용 가능)
 
- : 범위를 지정할 때
 
, : 여러 값을 지정할 때
 
/ : 증분값, 즉 초기값과 증가치 설정에 사용
 
L : 마지막 - 지정할 수 있는 범위의 마지막 값 설정 시 사용 (날짜와 요일에서만 사용 가능)
 
W : 가장 가까운 평일(weekday)을 설정할 때

를 의미한다.

 

 

cron 사용 예시

// 매일 오전 10시에 실행 (요일은 신경 쓰지 않음)
@Scheduled(cron = "0 0 10 * * ?")
public void everyDayAtTenAM() {
    System.out.println("매일 오전 10시에 실행");
}

// 매일 오전 9시부터 11시까지 매시간 0분에 실행
@Scheduled(cron = "0 0 9-11 * * ?")
public void everyHourFromNineToEleven() {
    System.out.println("9시에서 11시 사이 매 정각마다 실행");
}

// 월, 수, 금 오전 10시에 실행
@Scheduled(cron = "0 0 10 * * MON,WED,FRI")
public void specificDaysOfWeek() {
    System.out.println("월, 수, 금 오전 10시에 실행");
}

// 매 15분마다 실행 (0분, 15분, 30분, 45분)
@Scheduled(cron = "0 */15 * * * *")
public void everyFifteenMinutes() {
    System.out.println("매 15분마다 실행");
}

// 매월 마지막 날 자정에 실행
@Scheduled(cron = "0 0 0 L * ?")
public void lastDayOfMonth() {
    System.out.println("매월 마지막 날 자정에 실행");
}

// 매주 토요일에 실행 (주간의 마지막 날)
@Scheduled(cron = "0 0 0 ? * 7L")
public void everyLastSaturday() {
    System.out.println("매월 마지막 토요일 자정에 실행");
}

// 매월 1일에 가장 가까운 평일에 오전 9시 실행
@Scheduled(cron = "0 0 9 1W * ?")
public void nearestWeekdayToFirst() {
    System.out.println("매월 1일에 가장 가까운 평일 오전 9시에 실행");
}
저작자표시 (새창열림)

'Spring' 카테고리의 다른 글

[Spring] AES 암호화 알고리즘  (0) 2024.10.28
[Spring] WAR과 JAR  (2) 2024.10.25
[Spring] Spring에서 redis 서버 사용  (3) 2024.09.30
[Spring Boot] 외장 톰캣 웹 배포하기(apache-tomcat)  (0) 2024.09.25
[Spring] web.xml 한글 필터  (0) 2024.05.20
'Spring' 카테고리의 다른 글
  • [Spring] AES 암호화 알고리즘
  • [Spring] WAR과 JAR
  • [Spring] Spring에서 redis 서버 사용
  • [Spring Boot] 외장 톰캣 웹 배포하기(apache-tomcat)
kwh_coding
kwh_coding
성장하는 괴물 성괴 김우형
  • kwh_coding
    코딩 일기
    kwh_coding
  • 전체
    오늘
    어제
    • 분류 전체보기
      • JAVA
      • JavaScript
        • Node
        • React
      • PYTHON
      • GitHub
      • DJANGO
      • ERP Project
      • NAVER CLOUD Web DevOps
      • 자격증
        • SQLD
        • 정보처리기사
        • ADsP
      • 코딩테스트
        • 프로그래머스 Lv0
        • 프로그래머스 Lv1
      • Spring
      • Tools
        • Postman
        • eGov
      • WEB
      • CS
  • 블로그 메뉴

    • 홈
    • GitHub
    • Notion
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    코딩
    spring
    django
    javascript
    CORS
    SQLD
    Postman
    brycpt
    web
    gitbash
    js
    html
    Tomcat
    Java
    React
    코딩테스트
    정보처리기사
    private network
    jsp
    Python
    RDBMS
    해시 암호화
    node
    eGov
    AdSP
    github
    코테
    프로그래머스
    annotation
    git
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kwh_coding
[Spring] Scheduled 어노테이션
상단으로

티스토리툴바