@Schduled 이용하기

강찬우·2024년 1월 10일

토이 프로젝트 진행중 유로 멤버쉽을 구현하고 싶었다.

멤버쉽 가입 -> 한달 후 자동으로 멤버쉽 해지
이러한 로직을 구현하고 싶었는데 이를 @Schduled로 쉽게 구현 할 수 있었다.

@SpringBootApplication
@EnableJpaAuditing
@EnableScheduling
public class MediumApplication {

    public static void main(String[] args) {
        SpringApplication.run(MediumApplication.class, args);
    }

}

application에 @EnableScheduling어노테이션을 추가한 후에

    @Scheduled(cron = "0 0 0 * * ?")
    public void updateStatusOfExpiredMemberships(){
        List<Membership> all = membershipRepository.getExpiredMemberships();
        all.stream().forEach(membership -> {
            membership.setStatus(MembershipStatus.EXPIRED);
            membershipRepository.save(membership);
            memberService.setNotIsPaid(membership.getMember());
        });

    }

MembershipService에 이런 메서드를 추가 하면 일정 시간 마다 정해진 메서드를 실행하도록 할 수 있다.

크론표현식을 통해서 복잡한 스케쥴링이 가능한데
cron = "0 0 0 * * ?"라는 표현식은 Spring Framework의 @Scheduled 어노테이션에서 사용되는 크론(Cron) 표현식이다.
이 특정 표현식은 작업을 매일 자정에 실행하도록 스케줄링한다.

크론 표현식의 각 필드는 다음을 나타낸다:

  • 초 (0-59)
  • 분 (0-59)
  • 시 (0-23)
  • 일 (1-31)
  • 월 (1-12 또는 JAN-DEC)
  • 요일 (0-6 또는 SUN-SAT)
  • 연도 (선택적)

"0 0 0 * * ?"에서 각 필드는 다음과 같은 값을 가진다:

  • : 0초
  • : 0분
  • : 0시 (자정)
  • : 매일
  • : 매월
  • 요일: 매 요일 (?는 특정 요일을 지정하지 않음을 의미)
  • 연도: 생략 (매년)

따라서, 이 표현식은 매일 자정(00:00:00)에 작업을 실행하도록 설정한다. 이는 예를 들어 데이터베이스 백업, 일일 보고서 생성 등 매일 반복되어야 하는 작업에 적합하다.

0개의 댓글