스케줄러의 실행 시점을 설정해주는 cron 설정에 Enum상수의 필드값을 사용할 수 없었습니다.
private String every30Minutes = ServerProperties.SCHEDULER_CRON.getValue();
@Scheduled( cron = every30Minutes, zone = "Asia/Seoul" )
@Transactional
public void findExpiredMembers(){
실행 결과 :
error: element value must be a constant expression
@Scheduled( cron = every30Minutes, zone = "Asia/Seoul" )
^
이는 컴파일 타임에 @Scheduled 어노테이션이 cron 설정 값을 필요로 하는데,
getValue() 메서드를 통해 값을 얻는 것은 런타임에 수행되므로 컴파일 타임 상수가 아니기 때문에 발생하는 문제입니다.
@Value 와 Property를 이용하는 방법도 마찬가지로 사용할 수 없었습니다.
→ 해결방법 : Property를 이용하는 방법
Application.yml 파일에 다음과 같이 작성합니다
cron:
expression: 0 0/30 * * * ?
timezone: Asia/Seoul
cron설정에 @Value 를 사용할 때 처럼 “${}”를 이용하여 주입합니다
@Scheduled( cron = "${cron.expression}", zone = "${cron.timezone}" )
@Transactional
public void findExpiredMembers(){
'Java > Spring Boot' 카테고리의 다른 글
@TransactionalEventListener (0) | 2024.07.01 |
---|---|
Lombok 의존성 설정 시 왜 compileOnly, annotationProcessor로 설정되는걸까? - gradle 의존성 구성 정보 알아보기 (0) | 2024.06.13 |
Scheduler 관련 내용정리 (0) | 2024.06.03 |
유효성 검사 / 데이터 검증 (Validation) (0) | 2024.05.31 |
View에 사용자 이름을 전달하는 Controller 중복 코드 제거 (0) | 2024.03.19 |