Schedulare processi in Spring Boot e Java con JobRunr

Mattepuffo's logo
Schedulare processi in Spring Boot e Java con JobRunr

Schedulare processi in Spring Boot e Java con JobRunr

JobRunr è una libreria per Java per schedulare attività in background.

In questo articolo vediamo come usarla in Spring Boot!

Possiamo installare la libreria con Maven:

        <dependency>
            <groupId>org.jobrunr</groupId>
            <artifactId>jobrunr</artifactId>
            <version>5.0.1</version>
        </dependency>

Fatto questo, dobbiamo configurare lo scheduler; noi useremo la Fluent API.

Aggiungete questo codice nell'entry point della vostra applicazione:

import org.jobrunr.configuration.JobRunr;
import org.jobrunr.configuration.JobRunrConfiguration;
import org.jobrunr.scheduling.JobRequestScheduler;
import org.jobrunr.scheduling.JobScheduler;
import org.jobrunr.storage.sql.common.SqlStorageProviderFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;

@SpringBootApplication
public class SpringtestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringtestApplication.class, args);
    }

    @Bean
    public JobRunrConfiguration.JobRunrConfigurationResult initJobRunr(ApplicationContext applicationContext) {
        return JobRunr.configure()
                .useJobActivator(applicationContext::getBean)
                .useStorageProvider(SqlStorageProviderFactory
                        .using(applicationContext.getBean(DataSource.class)))
                .useBackgroundJobServer()
                .useJmxExtensions()
                .useDashboard()
                .initialize();
    }

    @Bean
    public JobScheduler initJobScheduler(JobRunrConfiguration.JobRunrConfigurationResult jobRunrConfigurationResult) {
        return jobRunrConfigurationResult.getJobScheduler();
    }

    @Bean
    public JobRequestScheduler initJobRequestScheduler(JobRunrConfiguration.JobRunrConfigurationResult jobRunrConfigurationResult) {
        return jobRunrConfigurationResult.getJobRequestScheduler();
    }

}

A questo punto nel nostro controller possiamo fare una cosa del genere:

import org.jobrunr.scheduling.BackgroundJob;
import org.jobrunr.scheduling.cron.Cron;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.ZonedDateTime;

@RestController
public class MainController {

    @GetMapping("/")
    public String index() {

        BackgroundJob.enqueue(() -> {
            System.out.println("ESEGUITO UNA VOLTA");
        });

        BackgroundJob.schedule(ZonedDateTime.now().plusMinutes(1), () -> {
            System.out.println("ESEGUITO UNA VOLTA TRA UN MINUTO");
        });

        BackgroundJob.scheduleRecurrently(Cron.every30seconds(), () -> {
            System.out.println("ESEGUITO OGNI 30 SECONDI");
        });

        return "Greetings from Spring Boot!";
    }


}

Una volta avviata l'applicazione andate su http://localhost:8080 per avviare gli scheduler.

Poi andate nella dashboard messa a disposizione da JobRunr all'indirizzo http://localhost:8000/dashboard.

Qui potete vedere tutti gli scheduler eseguiti, quelli in attesa e quelli ricorrenti.

Enjoy!


Condividi

Commentami!