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?
Java Cron ExpressionThe @EnableScheduling annotation is used to enable the scheduler for your application. This annotation should be added into the main Spring Boot application class file. The @Scheduled annotation is used to trigger the scheduler for a specific time period.
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.
Spring tutorial
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);
}
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
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.
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