来自属性文件的 Spring @Scheduled cron 详细信息 - 异常
Posted
技术标签:
【中文标题】来自属性文件的 Spring @Scheduled cron 详细信息 - 异常【英文标题】:Spring @Scheduled cron details from property file - Exception 【发布时间】:2016-03-15 16:46:27 【问题描述】:我试图在我的 spring @Scheduled 方法中定义 cron 详细信息
@Service
@PropertySource("classpath:application.properties")
public class CacheRefreshService
@Scheduled(cron = "$api.refresh.cron")
public void refreshJob() throws Exception
LOGGER.info("Started Refresh");
//do something
在我的 application.properties 中
#Refresh
api.refresh.cron =0 29 11 * * ?
当我与@Scheduled 一起定义 cron 详细信息时,它运行良好。但是当我这样做时,它无法从属性文件中读取值,并引发以下错误。
Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'refreshJob': Cron expression must consist of 6 fields (found 1 in "$api.refresh.cron")
有什么建议吗?
【问题讨论】:
你的@PropertySource
应该继续 @Configuration
类而不是 @Service
类。此外,您的代码似乎与您得到的错误不匹配,所以它是...
@M.Deinum 这是一个服务类。那么我如何阅读这里的属性呢?已更新错误信息
使用属性 (@Value
) 与读取文件不同。你的@PropertySource
现在几乎没用了,因为它什么也没做。此外,您还需要注册 PropertySourcesPlaceholderConfigurer
才能更换物品。
@M.Deinum 成功了。谢谢
【参考方案1】:
factoryBean.setCronExpression("0 0/1 * 1/1 * ? *");
你必须在 BeanFactory
类中设置 Cron Expresssion bcz setCronExpression
是强制性的
【讨论】:
【参考方案2】:将以下内容添加到我的 ApplicationContext 解决了问题..
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer()
return new PropertySourcesPlaceholderConfigurer();
【讨论】:
以上是关于来自属性文件的 Spring @Scheduled cron 详细信息 - 异常的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot实现定时任务二:使用注解@scheduled和@EnableScheduling
在每个 Spring 计划(@Scheduled)运行之前重置状态