'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. |