Reputation: 2551
I am current developing an application based on Spring-Boot.
I know that annotation like @Scheduled can schedule tasks. Since users in my application wanna send mails at different time and send only once.
I have already read the post Spring scheduling task - run only once, but it is weird always "new" an localExecutor in a Spring based application.
In that way , once a user schedule sending an email, I have to "new" an localExecutor for his task.
So , are there any better ways?
Upvotes: 23
Views: 50560
Reputation: 1
I have implemented a 'cron job' system using Quartz Scheduler and Spring Boot Scheduler.
The system supports scheduling based on start and end dates.
Let me know if anyone needs it, and I will provide the package format
Upvotes: -1
Reputation: 3282
Spring @Scheduled annotation will execute multiple times if you have more than one instance of your app where you have @Scheduled annotation.
If you are using PCF, you can use PCF scheduler https://docs.pivotal.io/scheduler/1-2/using-jobs.html to avoid this issue. Using Tasks can solve this issue.
Upvotes: 1
Reputation: 628
You can use crontab inside @Scheduled
private AtomicInteger counter = new AtomicInteger(0);
@Scheduled(cron = "*/2 * * * * *")
public void cronJob() {
int jobId = counter.incrementAndGet();
System.out.println("Job " + new Date() + ", jobId: " + jobId);
}
Upvotes: 15
Reputation: 1043
you should use quartz-scheduler
and send mails at different time and send only once.
- put this as a business logic in your code.
Please see for spring boot -quartz integration
https://github.com/davidkiss/spring-boot-quartz-demo
Upvotes: 9
Reputation: 466
The simplest way to schedule tasks in Spring is to create method annotated by @Scheduled
in spring managed bean. It also required @EnableScheduling
in any @Configuration
classes.
Upvotes: 28