@Scheduled expression 시간 설정을 properties로 빼는 방법

대게 서비스 개발 완료 후 상용 장비에 배포할 때 한 대에 하는 것이 아닌 여러 대의 장비에 배포한다.

헌데, @Scheduled 애노테이션의 cron 표현식을 자바 코드 안에 넣게 되면 같은 시간에 여러 대의 장비에서 배치가 구동 될 것이기 때문에 문제가 발생한다.

그래서 프로퍼티로 크론 표현식을 분리했다.

다음은 SpEL 설정 부분인데 @Scheduled(cron = “#{appConfig[‘cron.time’]}) 와 같이 하면 SpEL에서 값을 가져오지 못하고 오류가 발생한다.

<util:properties id=”baseConfig” location=”classpath:conf/base-config.xml” />

<util:properties id=”appConfig” location=”classpath:conf/${spring.profiles.active}-config.xml” />

오류가 발생되는 이유는?

SpEL로는 설정 분리가 안 되는 것인가?

잘 모르겠다. ㅠㅠ (알고 계신분이 계시다면 comment 부탁 드립니다.)

여하튼 다음과 같은 표현식을 통해서만 크론 표현식을 프로퍼티로 분리할 수 있다.

<util:properties id=”baseConfig” location=”classpath:conf/base-config.xml” />

<util:properties id=”appConfig” location=”classpath:conf/${spring.profiles.active}-config.xml” />

<context:property-placeholder properties-ref=”appConfig” /> <- 추가


@Scheduled(cron = “${cron.time}”)