При использовании возможности Spring 3.0 аннотировать запланированную задачу, я хотел бы установить fixedDelay
как параметр от моего конфигурационного файла, вместо того, чтобы соединить его проводами в мой класс задачи, как в настоящее время...
@Scheduled(fixedDelay = 5000)
public void readLog() {
...
}
К сожалению, кажется этим со средствами Языка Выражения Spring (SpEL) @Value
возвращает Строковый объект, который в свою очередь не может быть автоупакованным к длинному значению как требуется fixedDelay
параметр.
Думаю, об аннотации @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>
Опять же, я не пробовал любую из этих настроек, но я надеюсь, что это может вам немного помочь.
Я думаю, вы можете преобразовать значение самостоятельно, определив bean-компонент. Я не пробовал это , но полагаю, что подход, подобный следующему, может быть вам полезен:
<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>