dvrnaidu
dvrnaidu

Reputation: 151

Run a timer task on a specific day (1st of every month) using Spring

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

Answers (3)

Cássio Morales
Cássio Morales

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

rgrebski
rgrebski

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

Related Questions