I want to set 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 this exception excludes
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 modified, but the expression was not replaced.
I tried setting 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 do not find a way to contribute my custom CustomValueResolver.
Am I on the right or wrong path? there is another easy way
java spring spring-annotations spring-el
amgohan
source share