Exia
Exia

Reputation: 2551

What is best way to schedule task in spring boot application

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

Answers (5)

Ashwath naidu
Ashwath naidu

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.

  1. It supports scheduling based on daily, weekday, monthly, and weekly frequencies.
  2. It supports running on multiple application instances, but only runs on one
  3. server at a time.
  4. It generates cron expressions dynamically.
  5. It supports scheduling based on time zone.
  6. It is built on Java 8.
  7. And more.

Let me know if anyone needs it, and I will provide the package format

Upvotes: -1

Ketan
Ketan

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

Satish Kr
Satish Kr

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

Pankaj Pandey
Pankaj Pandey

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

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

Upvotes: 28

Related Questions