I have a Spring scheduled method that is periodically run:
@Scheduled(cron = "${spring.cron.expression}")
public void demonJob() { ... }
The cron expression is successfully read from the application.properties
:
spring.cron.expression=0 0 * * * *
Now, I want to deploy my application to a special environment on which this particular scheduled method is not supposed to run. If I leave the cron property empty like this...
spring.cron.expression=
... I get the following exception:
Encountered invalid @Scheduled method 'demonJob': Cron expression must consist of 6 fields (found 0 in "")
How can I disable the Scheduled method elegantly, ideally only by providing a different setting in application.properties
?
Canceling the Scheduled Future. Another way to stop the scheduler would be manually canceling its Future. In the cases with multiple scheduler tasks, then we can maintain the Future map inside of the custom scheduler pool but cancel the corresponding scheduled Future based on scheduler class.
Stop a cron job You can stop a single cron job by removing its line from the crontab file. To do that, run the crontab -e command and then delete the line for the specific task. Alternatively, you can stop the cron job by commenting it out in the crontab file.
As of Spring 5.1.0, the special cron value "-" can be used with the @Scheduled
annotation to disable the cron trigger.
The special value "-" indicates a disabled cron trigger, primarily meant for externally specified values resolved by a ${...} placeholder.
For your specific example, you merely need to set the spring.cron.expression
variable to this value. If this is a Spring Boot project, you can use one of the many externalized configuration options available for this purpose, including:
If this is not a Spring Boot project, you can still specify this property, though the mechanism to do so is going to be less standard and more project specific.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With