java - 遇到无效的@Scheduled 方法“processNotifications”:Cron 表达式必须包含 6 个字段(在“#{@getConfigRetryValue}”中找到 1 个)
问题描述
我正在将 ant build 转换为 gradle build。突然之间,用于从 xml 配置的 @schedule 不起作用。我正在尝试初始化一种从 xml 获取值的方法。我试过了
xml配置如下
<interface name="appnotification">
<property name="retry_interval" value="0 0/5 * * * ?" /> <!-- every 5 minutes -->
</interface>
java文件如下
@Component
@EnableScheduling
public class Task {
private static final String INTERFACE_NAME = "appnotification";
@Bean
public String getConfigRetryValue() {
Map interfaceProps = Config.getInterfaceProperties(INTERFACE_NAME);
return (String) interfaceProps.getOrDefault("retry_interval", DELAY_TIME_IN_MINS);
}
@Scheduled(cron = "#{@getConfigRetryValue}")
public void processNoti() {}
}
错误如下
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Task' defined in URL [jar:file:abc.jar!/abc/report/Task.class]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: Encountered invalid @Scheduled method 'processNotifications': Cron expression must consist of 6 fields (found 1 in "#{@getConfigRetryValue}")
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:921)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:864)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:779)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:503)
... 41 more
Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'processNotifications': Cron expression must consist of 6 fields (found 1 in "#{@getConfigRetryValue}")
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.processScheduled(ScheduledAnnotationBeanPostProcessor.java:300)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.access$000(ScheduledAnnotationBeanPostProcessor.java:76)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor$1.doWith(ScheduledAnnotationBeanPostProcessor.java:164)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:495)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:473)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.postProcessAfterInitialization(ScheduledAnnotationBeanPostProcessor.java:160)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1520)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
... 50 more
解决方案
推荐阅读
- javascript - 命中新api后如何使实时图表恢复正常
- javascript - 如何从猫鼬模式拼接项目然后保存文档或模式?
- c# - EF Core 不会根据关系属性进行更新
- html - 不影响周围元素的 CSS 过渡
- xv6 - Xv6 缓冲区缓存锁定
- ruby-on-rails - Rails 6 - 无法通过 Docker 联网 Webpack 开发服务器
- java - 构建原生 Quarkus 应用程序时的编译器问题
- android - 如何在 kotlin 中按下后退按钮时显示插页式广告?
- java - 日期和时间在特定索引处显示解析错误
- ffmpeg - ffmpeg 将多个 FHD 视频与 concat 选项结合起来,但输出为高清