动态设置cron表达式值

时间:2015-08-06 21:33:48

标签: spring cron scheduler

我想使用控制器动态设置cron表达式值。这是我的代码段。

@Service
@EnableScheduling
@Configuration
@PropertySources({
    @PropertySource("classpath:properties/cron.properties")
})
public class SchedulerServiceImpl implements SchedulerService{

    private final static Logger log = LoggerFactory.getLogger(SchedulerServiceImpl.class);
    @Value( "${cron.expression}")
    private String cronValue;

    @Scheduled(cron = "${cron.expression}")
    public void getTweetsFromAPI(){
        log.info("Trying to make request for get Tweets through TweetController.");
        log.debug("----------------Executing cron.expression {}----------------",cronValue);


    }
}

如何在部署后动态设置cron.expression值。如果我使用控制器并替换属性文件现有值,它是否有效?

1 个答案:

答案 0 :(得分:0)

从逻辑上讲,你的问题是错误的。 Cron表达式用于在指定时间内调度方法,即该方法将在每天中午12点的指定时间执行。

现在,如果您正在动态更改cron表达式值,这意味着您正在控制此方法的执行而不是错误的调度程序。

您可以执行以下操作: -

@Value( "${cron.expression1}")
private String cron1;


@Value( "${cron.expression2}")
private String cron2;



@Scheduled(cron=cron1)
public void method1(){
//call to method
this.method();
}


@Scheduled(cron=cron2)
public void method2(){
//call to method
this.method();
}


 private void method(){
 //Your scheduling logic goes here
 }

在这里,你重复使用方法()在两个不同的时间安排。