본문 바로가기
프로젝트

파이널 프로젝트_ @Scheduler를 활용한 통계 저장 기능

by 유서담 2024. 5. 1.

@Scheduler 어노테이션을 사용하려면

실행되면 프로젝트 Application 클래스에 

@EnableScheduling

 

을 붙여주어야 한다

 

 

DashBoardScheduleService

 

DashBoardScheduleSevice

 

 

DashBoardScheduleService 는 예약 작업을 설정하는 @Scheduler 애노테이션을 사용하여

특정 시간마다 자동으로 수행될 작업을 정의해놓았다

 

정의해놓은 작업은

매일 오전10시에 실행되는 saveTotalYesterday( ) 메소드와 

매주 월요일 오전 10시에 실행되는 saveTotalLastWeek( ) 메소드다

 

saveTotalYesterday( ) 메소드는 

 

saveTotalYesterday 메소드

 

BUY 테이블에서

오늘기준으로 어제날자의 판매 데이터를 조회해서 합산하고

통계테이블인 DAY_TOTAL 테이블에 저장한다

 

DAY_TOTAL 테이블

 

 

saveTotalLastWeek( ) 메소드는 

 

saveTotalLastWeek

 

DAY_TOTAL 테이블에서

지난주 일요일 ~ 토요일 매출액을 합산해서

WEEK_TOTAL 매출액 컬럼에 저장하고

날짜 컬럼에는 해당하는 월의 몇번째 주 인지를 저장한다

(만약 3째주면 2024-04-3 으로 저장될 수 있게끔) 

 

WEEK_TOTAL 테이블

 

 

 

@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 표현식에 대해 전문적으로 작성한 다른 블로그글을 참고하면 좋을 것이다