来自属性文件的 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注解配置定时任务

在每个 Spring 计划(@Scheduled)运行之前重置状态

使用轻量级Spring @Scheduled注解执行定时任务

spring Cloud 定时任务 @Scheduled

在Spring项目中使用@Scheduled注解定义简单定时任务