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!
java spring boot maven jobrunr fluent
Commentami!