Search code examples
javaspringconfigurationannotationsscheduling

How to parameterize @Scheduled(fixedDelay) with Spring 3.0 expression language?


When using the Spring 3.0 capability to annotate a scheduled task, I would like to set the fixedDelay as parameter from my configuration file, instead of hard-wiring it into my task class, like currently...

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

Unfortunately it seems that with the means of the Spring Expression Language (SpEL) @Value returns a String object which in turn is not able to be auto-boxed to a long value as required by the fixedDelay parameter.


Solution

  • I guess the @Scheduled annotation is out of question. So maybe a solution for you would be to use task-scheduled XML configuration. Let's consider this example (copied from Spring doc):

    <task:scheduled-tasks scheduler="myScheduler">
        <task:scheduled ref="someObject" method="readLog" 
                   fixed-rate="#{YourConfigurationBean.stringValue}"/>
    </task:scheduled-tasks>
    

    ... or if the cast from String to Long didn't work, something like this would:

    <task:scheduled-tasks scheduler="myScheduler">
        <task:scheduled ref="someObject" method="readLog"
                fixed-rate="#{T(java.lang.Long).valueOf(YourConfigurationBean.stringValue)}"/>
    </task:scheduled-tasks>
    

    Again, I haven't tried any of these setups, but I hope it might help you a bit.