관리 메뉴

피터의 개발이야기

[Spring] Spring schedule을 조건부로 활성화 하기 본문

Programming/Spring

[Spring] Spring schedule을 조건부로 활성화 하기

기록하는 백앤드개발자 2020. 12. 2. 13:27
반응형

 

1. 소개

Spring Scheduling 을 통해 특정 간격으로 코드를 실행할 수 있습니다. 간격은 @Scheduled 어노테이션을 사용하여 지정되기 때문에 일반적으로 간격은 정적이며 애플리케이션 구동하는 동안 변경할 수 없습니다 .

 

 

2. @Value boolean

 

Spring Schedule 작업을 조건부로 활성화하는 가장 간단한 방법은 예약 된 작업 내부에서 확인하는 Value 변수를 사용하는 것입니다. 

변수는 @Value  주석을 달아 일반적인 Spring configuration사용하여 구성 할 수 있습니다 .

@Configuration
@EnableScheduling
public class ScheduledJobs {
  @Value("${jobs.enabled:true}")
  private boolean isEnabled;

  @Scheduled(fixedDelay = 60000)
  public void cleanTempDirectory() {
    if(isEnabled) {
      // do work here
    }
  }
}

 

3. @ConditionalOnProperty 사용하기

 

Spring Schedule 작업을 조건부로 활성화하는 가장 간단한 방법은 예약 된 작업 내부에서 확인하는 Value 변수를 사용하는 것입니다. 

변수는 @Value  주석을 달아 일반적인 Spring configuration사용하여 구성 할 수 있습니다 .

 

@Configuration
@EnableScheduling
public class ScheduledJobs {
    @Bean
    @ConditionalOnProperty(value = "jobs.enabled", matchIfMissing = true, havingValue = "true")
    public ScheduledJob scheduledJob() {
        return new ScheduledJob();
    }
}

 

 

4. @Profile 사용하기

Spring Schedule 을 Profile에 따라 작동 시킬 수 있다. 

개발환경에 따라 크게 3가지 환경이 있다. local, dev, prod 상황에 따라 구동가능하다.
이것은 변수는 @ConditionalOnProperty를 사용하는 것과 유사하게 작동된다. 단, @Profile 어노테이션을 사용한다는 점이 다르다.

 

@Profile("prod")
@Bean
public ScheduledJob scheduledJob() {
    return new ScheduledJob();
}

이렇게 하면 prod 프로필이 활성화 된 경우에만 스케줄이 생성이 된다. 또한 @Profile과 함께 제공되는 전체 옵션 세트를 제공한다.

 

@Profile("!prod")
@Bean
public ScheduledJob scheduledJob() {
    return new ScheduledJob();
}

프로필의 이름에 NOT 연산자를 사용하면 prod 프로필이 활성화되지 않은 경우에만 활성화가 됩니다.

 

5. Cron 표현식

Spring Schedule Cron표현식으로 가동여부를 설정할 수 있다.
변수형태로 받와고기 때문에 일정을 변경할 수도 있다. 로컬,개발,운영이 다른 시간대에 가동이 가능한 것이다.

반대로 작업을 하지 않게 할 수도 있다.

@Scheduled(cron = "${jobs.cronSchedule:-}")
public void cleanTempDirectory() {
    // do work here
}

이 예에서 작업은 기본적으로 비활성화 상태이다. (특수 Spring cron 비활성화 표현식 사용)

작업을 환성화 하려면 jobs.cronSchedule에 유효한 cron표현식을 제공하기만하면 된다. 다른 Spring 구성과 마찬가지로 명령 줄 인수,환경변수,속성 파일 등을 수행할 수 있다. 

 

ㅁ 함께 보면 좋은 사이트

참조 : www.baeldung.com/spring-scheduled-enabled-conditionally

 

Conditionally Enable Scheduled Jobs in Spring | Baeldung

Learn different options to conditionally enable a Spring Scheduled Job

www.baeldung.com

반응형

'Programming > Spring' 카테고리의 다른 글

[Spring] War 배포와 Jar 배포 시 resource 참조 문제  (0) 2020.12.14
Spring Profiles  (0) 2020.12.12
[Spring] Jackson Annotations  (0) 2020.12.10
[SPRING BOOT] Retrofit vs Feign for Server Side  (0) 2020.12.08
[Spring] @Transient  (0) 2020.12.02
Comments