@Scheduler 어노테이션을 사용하려면
실행되면 프로젝트 Application 클래스에
@EnableScheduling
을 붙여주어야 한다
DashBoardScheduleService
DashBoardScheduleService 는 예약 작업을 설정하는 @Scheduler 애노테이션을 사용하여
특정 시간마다 자동으로 수행될 작업을 정의해놓았다
정의해놓은 작업은
매일 오전10시에 실행되는 saveTotalYesterday( ) 메소드와
매주 월요일 오전 10시에 실행되는 saveTotalLastWeek( ) 메소드다
saveTotalYesterday( ) 메소드는
BUY 테이블에서
오늘기준으로 어제날자의 판매 데이터를 조회해서 합산하고
통계테이블인 DAY_TOTAL 테이블에 저장한다
saveTotalLastWeek( ) 메소드는
DAY_TOTAL 테이블에서
지난주 일요일 ~ 토요일 매출액을 합산해서
WEEK_TOTAL 매출액 컬럼에 저장하고
날짜 컬럼에는 해당하는 월의 몇번째 주 인지를 저장한다
(만약 3째주면 2024-04-3 으로 저장될 수 있게끔)
@Scheduled cron 표현식
@Scheduled(cron = "0 0 10 * * ?")
왼쪽부터
초, 분, 시, 일, 월, 요일 순으로 되어있다
첫번째 0 : 초를 지정해준다. (0~59까지 가능)
두번째 0 : 분을 지정해준다. ( 0~59 )
세번째 0: 시간을 지정해준다. ( 0 ~ 23 )
네번째 0 : 일을 지정해준다. ( 0부터 31까지 가능하다 )
다섯번째 0 : 월을 지정해준다. ( 1부터 12까지 )
여섯번째 0 : 특정 요일을 지정해줄 수 있다
?는 매일매일 동작하는 것을 뜻한다
( 찾아서 적용할 때 일요일 = 1, 토요일 = 7 이라고 되어있는데
위에 saveTotalLastWeek 메소드를 보면 나는 MON 을 사용하고 있다
처음에 숫자로 표기했는데 정상적으로 작동하지 않아서 MON으로 작성하니
정상적으로 작동해서 숫자로 사용하지 않고 있다)
(영어 표기로는 MON, WED, FRI 이런식으로 사용한다
순서대로 월, 수, 금이다 )
cron 표현식은 굉장히 다양해서 더 많은 내용이 궁금하면
cron 표현식에 대해 전문적으로 작성한 다른 블로그글을 참고하면 좋을 것이다
'프로젝트' 카테고리의 다른 글
파이널 프로젝트_ MySQL 데이터베이스 이중화 - 읽기 분리 전략 적용하기 (1) | 2024.05.07 |
---|---|
파이널 프로젝트_Chart.Js를 활용한 대시보드 (0) | 2024.05.01 |
파이널 프로젝트_로그인, 로그아웃(Spring Boot, Session ) (0) | 2024.04.20 |
파이널 프로젝트_회원가입(Spring Boot, @Valid , MySQL) (0) | 2024.04.20 |
세미프로젝트_견적요청(서비스 페이지) (0) | 2024.02.08 |