답변:
@Scheduled
주석에 문제가 있다고 생각합니다 . 따라서 task-scheduled
XML 구성 을 사용하는 것이 좋습니다 . 이 예제를 고려해 봅시다 ( Spring doc 에서 복사 ).
<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="someObject" method="readLog"
fixed-rate="#{YourConfigurationBean.stringValue}"/>
</task:scheduled-tasks>
... 또는 String에서 Long으로 캐스트가 작동하지 않으면 다음과 같이됩니다.
<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="someObject" method="readLog"
fixed-rate="#{T(java.lang.Long).valueOf(YourConfigurationBean.stringValue)}"/>
</task:scheduled-tasks>
다시 한번, 나는 이러한 설정을 시도하지 않았지만 약간 도움이되기를 바랍니다.
Spring v3.2.2는이를 처리하기 위해 String 매개 변수를 원래 3 개의 long 매개 변수에 추가했습니다. fixedDelayString
, fixedRateString
및 initialDelayString
도 사용할 수 있습니다.
@Scheduled(fixedDelayString = "${my.fixed.delay.prop}")
public void readLog() {
...
}
Spring Boot 2에서는 @Scheduled
주석 속성에 Spring Expression Language (SpPL)를 사용할 수 있습니다 .
@Scheduled(fixedRateString = "${fixed-rate.in.milliseconds}")
public void fixedRate() {
// do something here
}
@Scheduled(fixedDelayString = "${fixed-delay.in.milliseconds}")
public void fixedDelay() {
// do something here
}
@Scheduled(cron = "${cron.expression}")
public void cronExpression() {
// do something here
}
application.properties
파일은 다음과 같이 표시됩니다
fixed-rate.in.milliseconds=5000
fixed-delay.in.milliseconds=4000
cron.expression=0 15 5 * * FRI
그게 다야. 다음은 작업 예약에 대해 자세히 설명 하는 기사 입니다.
빈을 정의하여 값을 직접 변환 할 수 있다고 생각합니다. 나는 그것을 시도하지 않았지만 다음과 비슷한 접근법이 당신에게 유용 할 것이라고 생각합니다.
<bean id="FixedDelayLongValue" class="java.lang.Long"
factory-method="valueOf">
<constructor-arg value="#{YourConfigurationBean.stringValue}"/>
</bean>
어디:
<bean id="YourConfigurationBean" class="...">
<property name="stringValue" value="5000"/>
</bean>
@Scheduled
주석으로 그것을 할 수 없다고 생각합니다 .