일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- minikube
- CKA
- Java
- kotlin
- IntelliJ
- CloudWatch
- 코틀린 코루틴의 정석
- AI
- Linux
- 공부
- CKA 기출문제
- 티스토리챌린지
- aws
- APM
- Spring
- 오블완
- kotlin spring
- kotlin querydsl
- 기록으로 실력을 쌓자
- PETERICA
- Elasticsearch
- AWS EKS
- MySQL
- mysql 튜닝
- Kubernetes
- kotlin coroutine
- Pinpoint
- 정보처리기사 실기
- 정보처리기사 실기 기출문제
- 정보처리기사실기 기출문제
- Today
- Total
피터의 개발이야기
[Spring] Spring schedule을 조건부로 활성화 하기 본문
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
'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 |