토이 프로젝트 진행중 유로 멤버쉽을 구현하고 싶었다.
멤버쉽 가입 -> 한달 후 자동으로 멤버쉽 해지
이러한 로직을 구현하고 싶었는데 이를 @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 0 0 * * ?"에서 각 필드는 다음과 같은 값을 가진다:
?는 특정 요일을 지정하지 않음을 의미)따라서, 이 표현식은 매일 자정(00:00:00)에 작업을 실행하도록 설정한다. 이는 예를 들어 데이터베이스 백업, 일일 보고서 생성 등 매일 반복되어야 하는 작업에 적합하다.