Reputation: 151
We have a requirement of running a job on 1st of every month (time: 00:00:00 AM) exactly.
We are using Spring framework's ScheduledTimerTask to schedule jobs using delay and period properties. This class doesn't support running a job on specific date.
Can somebody suggest, how we can solve that problem using Spring and Java technology?
Upvotes: 7
Views: 23058
Reputation: 131
Since v5.3 Spring supports macros which represent commonly used sequences. See: New in Spring 5.3: Improved Cron Expressions
In your case you could use:
@Scheduled(cron = "@monthly")
public void task() {
// your task
}
which is the same as writing this:
@Scheduled(cron = "0 0 0 1 * *")
public void task() {
// your task
}
Upvotes: 1
Reputation: 2584
If you don't have to run this job on a single node in a cluster you can use Spring Task, see: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
@Scheduled(cron="0 0 0 1 1/1 *")
public void doSomething() {
// something that should execute on 1st day every month @ 00:00
}
For generating cron expressions try cronmaker.com
Please be aware that if you use this code in a cluster it will run on all nodes.
Upvotes: 18
Reputation: 39457
You can use Quartz Scheduler. It integrates great with Spring.
http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-06
Upvotes: 0