Как параметризовать @Scheduled (fixedDelay) с языком Spring 3.0 выражения?

При использовании возможности Spring 3.0 аннотировать запланированную задачу, я хотел бы установить fixedDelay как параметр от моего конфигурационного файла, вместо того, чтобы соединить его проводами в мой класс задачи, как в настоящее время...

@Scheduled(fixedDelay = 5000)
public void readLog() {
        ...
}

К сожалению, кажется этим со средствами Языка Выражения Spring (SpEL) @Value возвращает Строковый объект, который в свою очередь не может быть автоупакованным к длинному значению как требуется fixedDelay параметр.

114
задан Jagger 10 May 2017 в 08:08
поделиться

2 ответа

Думаю, об аннотации @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>

Опять же, я не пробовал любую из этих настроек, но я надеюсь, что это может вам немного помочь.

26
ответ дан 24 November 2019 в 02:28
поделиться

Я думаю, вы можете преобразовать значение самостоятельно, определив 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>
1
ответ дан 24 November 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: