본문 바로가기

spring(스프링)

spring scheduler 사용하기

반응형

1. scheduler 사용 이유

2. scheduler 사용 법

3. scheduler 속성 

 

1. scheduler 사용이유

scheduler를 사용하는 이유는 간단합니다. 

일정한 시간, 간격을 가져 코드를 실행시키기 위함인데요 

예를 들어 공공 API 들은 사용 제한이 있는경우가 많습니다. 실시간으로 업데이트 되는 데이터들이 아니라면 

db에 저장해 놓고 사용을 하는데 공공 API가 업데이트가 된다면 우리가 사용하고 있는 데이터들 또한 업데이트를 해야 할 것입니다 

이 때 직접 데이터를 업데이트할 수 있겠지만 그것 보단 spring에서 지원하는 scheduler를 사용하는 것이 훨씬더 간편하고 좋습니다!


2. scheduler 사용법 

우선 스projectApplication 에 스케줄러를 사용할 수 있게 @EnableScheduling 을 붙여줍시다 

@SpringBootApplication
@EnableScheduling //필요
public class ScheduleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ScheduleApplication.class, args);
    }
}

 

그리고 schedule을 조정할 메소드에 @scheduled를 붙여준뒤 설정을 해주시면 됩니다 

@Component
public class ScheduleTest {

    @Scheduled(fixedDelay = 1000)
    public void scheduleFixedDelayTest() {
        System.out.println("전 작업이 종료되고 1초 뒤 실행 ");
    }
}

이렇게 하시면 1초에 한번씩 메소드가 실행됩니다 

단 여기서 규칙이 있는데 

1.parameter을 가지면 안됩니다

2.return을 가지면 안됩니다


3. scheduler 속성 

cron 표현식

자세하게 설명을 한다면 너무 길어지기 때문에 다른 곳을 참고하시면 더 이해하는데 도움이 됩니다 간단하게 

크론 표현식은 7개로 구성 되어있고 유닉스/리눅스는 초와 연도를 제외한 5개를 사용합니다 

초 분 시 일 월  주 년

 *  *   *   *   *   *   *

0 0/10 * * * * //10분 마다

zone

cron 표현식은 로컬 시간대를 사용하지만 zone을 지정하게 되면 그 지역 시간에 맞춰 사용됩니다!

cron = "0 0/10 * * * *", zone = "Europe/Paris"

fixedDelay

@Scheduled(fixedDelay = 1000)
    public void scheduleFixedDelayTest() {
        System.out.println("시간에 맞춰 1초마다 실행 실행");
    }

 

fixedDelayString

위와 동일하지만 String 타입으로 값을 설정하는 것이 다릅니다


fixedRate

@Scheduled(fixedRate = 1000)
    public void scheduleFixedRateTest() {
        System.out.println("전 작업이 종료되고 1초 뒤 실행 ");
    }

 

fixedRateString

위와 동일하지만 String 타입으로 값을 설정하는 것이 다릅니다


initialDelay

@Scheduled(fixedDelay = 4000 , initialDelay = 2000)
    public void scheduleFixedDelayWithInitialDelayTest(){
        System.out.println("처음은 2초뒤 실행 그후엔 4초 ");
    }

initialDelayString

위와 동일하지만 String 타입으로 값을 설정하는 것이 다릅니다

 


모든 작업은 동기로 실행이 됩니다 하지만 비동기로 사용하고 싶으시다면 

@Component
@EnableAsync
public class ScheduleTest {
	
    @Async
    @Scheduled(fixedDelay = 1000)
    public void scheduleFixedDelayTest() {
        System.out.println("전 작업이 종료되고 1초 뒤 실행 ");
    }
}

이렇게 사용해 주시면 됩니다 

반응형