'Spel not supported on spring annotation @Scheduled.fixedDelayString

I want to configure the fixedDelay in seconds in my properties file, then I want to convert it to millis in @Scheduled annotation.

I expected this to work:

@Scheduled(fixedDelayString = "#{${my.scheduler.fixed.delay} * 1000}")

But it throw this exception:

Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'myMethod': Invalid fixedDelayString value "#{5 * 1000}" - cannot parse into integer at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.processScheduled(ScheduledAnnotationBeanPostProcessor.java:384) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE] at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor$1.doWith(ScheduledAnnotationBeanPostProcessor.java:227) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE]

${my.scheduler.fixed.delay} was correctly resolved but the expression was not resolved.

I tried to configure my own StringValueResolver:

private static class CustomValueResolver
    implements StringValueResolver {

    private final ConfigurableBeanFactory beanFactory;

    private final ExpressionParser expressionParser;

    public CustomValueResolver(final ConfigurableBeanFactory beanFactory, final ExpressionParser expressionParser) {

        this.beanFactory = beanFactory;
        this.expressionParser = expressionParser;
    }

    @Override
    public String resolveStringValue(
        final String strVal) {

        String value = this.beanFactory.resolveEmbeddedValue(strVal);
        if (value.startsWith("#{")) {
            value = this.expressionParser.parseExpression(value).getValue(String.class);
        }
        return value;
    }
}

But I don't find the way to inject my custom CustomValueResolver.

Am I on the right or wrong way?



Solution 1:[1]

try this:

#{new Integer(${my.scheduler.fixed.delay}) * 1000}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Michele C.