날아라쩡글이의 블로그입니다.

@EnableScheduling 스프링 스케쥴러 본문

중앙 HTA (2106기) story/spring java framwork story

@EnableScheduling 스프링 스케쥴러

날아라쩡글이 2022. 2. 3. 14:07
반응형

스케쥴링 - 클라이언트와 상관없이 일정시점에 이뤄져야하는 것을 의미한다. 매일, 어느싯점, 특정한 주기로 실행되는 것을 @Scheduled 이라고 부른다. 

springboot는 @EnableScheduling을 진입점에 어노테이션을 부착하면 된다.
예를 들면 숙소를 예약할 때 예매한 시점으로부터 결제를 안하면 예매를 취소하는 기능을 의미한다.
@SpringbootApplication위에 부착한다. 
maven으로 만든 경우, spring been으로 생성한 context-root.xml에 task namespace에서 누르고, taskannotation-driven으로 설정한다. 

클래스를 하나 정의한다. 컴포넌트라는 어노테이션을 붙이면 자동으로 스프링의 bean으로 등록된다. 
그다음은 메소드에 @Scheduled라는 어노테이션을 부착한다. 

특정메소드에 @Scheduled어노테이션을 설정하면 주기적으로 메소드가 실행되게 된다.
그 주기를 설정하기 위해서 어노테이션에 옵션을 설정하면된다. 
메소드를 재정의하는 것이다. 

  • fixedDelay
    • 이전 작업이 종료된 후 설정된 시간만큼 기다린 후에 시작한다.
    • 이전 작업을 종료 하고, 1초 후 바로 실행된다. 
  • fixedRate
    • 이전 작업이 종료되지 않아도 설정된 시간마다 시작한다. 
    • 설정된 시간만 지나면 바로 시작한다.
  • cron
    • 원하는 시간대를 설정하여 작업을 실행한다. 
    • 유닉스 시스템안에서 반복적으로 실행해야하는 쉘 스크립트로 프로그램을 짜고, 특정 주기로 실행할 수 있다. 
    • 유닉스 시스템안에서 실행되는 시스템을 가져올 수 있다. 
    • 원하는  시간대를 설정하여 6자리 문자로 작성되어 있는 cron작성방법으로 작성한다. 
    • 초,분,시,일,월,요일,년으로 작성할 수 있으며, 띄어쓰기로 구분이 된다. 
      • *라고 작성하면 모든것을 포함 한다는 의미이다. 
      • ?라는 고려하지 않는다. 
      • 거의 년은 사용하지 않고, 6개의 필드로 사용한다. 
      • 초 0~59 , - * /
      • 분 0~59
      • 시 0~23
      • 일 1~ 31  , - * ? / L W C
      • 월 1~12
      • 요일 0~6  , - * ? / L C #
    • 특수문자의 사용방법 
      • * : 모든값
      • ? : 해당 필드를 고려하지 않는다. 
        • 일자를 나타내는 필드와 요일을 나타내는 필드에 동시에 설정할 수 없다. 
      • , : 여러개의 값을 나열한다. ex) 0,15,30,45
      • - : 범위를 표시한다. ex) 2-4는 2,3,4를 의미한다. 
      • / : 초기치를 기준으로 일정하게 증가하는 값을 의미한다. 
        • 초를 나타내는 필드에 0/15는 0을 시작으로 15초씩 증가를 의미한다. 
      • L : 일에서 사용하면 마지막 일, 요일에서는 마지막 요일을 의미한다.
        • 2월과 30일로 끝나는 날이 있을 수 있기 때문에 설정할 수 있다. 
      • W : 가장 가까운 평일 ex) 10W 10일에서 가장 가까운 평일
      • # : 몇째주의 무슨요일을 지정
    • 컴포넌드를 붙이고, Service를 Autowired를 전달받아서 필요한 업무로직을 주기적으로 실행할 수 있다. 
    • DB access 를 스케쥴을 조절할 수 있다. 
    • 기간이 만료되면 폐기하는 작업을 한다. 기간이 만료되는 것을 찾는 것을 쿠폰 사용만료날짜가 작성이 되어있을 경우 하루에 1번만 실행되는 것을 실행한다. 
반응형
Comments