Artifact

  • spring-context

역할

  • 일정한 시간 간격 또는 특정 시간에 함수가 실행 되도록 할수 있다.

사용법

  • Configuration에 @EnableScheduling Annotation을 적용
@EnableWebMvc  
@EnableScheduling  
@ComponentScan(basePackages = "org.test")  
public class WebMvcTestConfiguration implements WebMvcConfigurer {  
    @Override  
    public void configureViewResolvers(ViewResolverRegistry registry) {  
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();  
        resolver.setPrefix("/WEB-INF/");  
        resolver.setSuffix(".jsp");  
        registry.viewResolver(resolver);  
    }  
}
  • Schedule이 필요한 함수에 @Scheduled Annotation 적용
@Component  
public class ScheduleSample {  
    @Scheduled(cron ="0 0/1 * * * ?")  
    public void doEveryOneMinutes(){  
        System.out.println(LocalTime.now() + " : doEveryOneMinutes");  
    }  
}
  • 결과

image

Schedule Option

cron

  • cron 표현식을 사용
  • ex)
@Scheduled(cron ="0 0/1 * * * ?")  
public void doEveryOneMinutes(){  
	System.out.println(LocalTime.now() + " : doEveryOneMinutes");  
}  
@Scheduled(cron = "#{@getCronForDeleteOldTaskQueue}")  
public void deleteOldTaskQueue() {  
    Integer[] values = getBatchExecutingInfoValues(BatchJobTypeCode.BATCH_DELETE_OLD_TASK_QUEUE, new Integer[] {30});  
    taskQueueWebService.deleteOldTaskQueue(values[0]);  
}

fixedDelay

  • 해당 메소드가 종료된 이후부터 그다음 메소드 실행시간까지의 주기
  • 단위 : ms
@Scheduled(fixedDelay = 3000) 
private void scheduleTest() { logger.error("hello"); }

fixedDelayString

  • properties로 부터 실행 주기 입력

fixedRate

  • 해당 메소드가 실행된 직후부터의 주기
  • 단위 : ms

fixedRateString

  • properties로 부터 실행 주기 입력
@Scheduled(fixedRateString = "${myscheduler.period}") 
private void scheduleTest() { logger.error("hello"); }

initialDelay

  • 스케줄러에서 메서드가 등록되자마자 수행하는 것이 아닌 초기 지연시간을 설정
@Scheduled(initialDelay = 3000) 
private void scheduleTest() { logger.error("hello"); }

initialDelayString

  • properties로 부터 실행 주기 입력

연결문서

댓글남기기