From 73e198dea492b25900b8a9cde743d03e60b00f15 Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Mon, 22 Jul 2024 15:55:21 +0200 Subject: [PATCH] Legger til job-scheduler logikk for initiell job-scheduling + cron-expression formatering --- .../scheduler/JobScheduler.java | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/scheduler/JobScheduler.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/scheduler/JobScheduler.java index 2e6e83602ba..65a33e1d2de 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/scheduler/JobScheduler.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/scheduler/JobScheduler.java @@ -2,6 +2,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import no.nav.registre.testnorge.levendearbeidsforholdansettelse.entity.JobbParameterEntity; +import no.nav.registre.testnorge.levendearbeidsforholdansettelse.service.JobbService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; @@ -9,24 +11,24 @@ import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import java.util.List; import java.util.concurrent.ScheduledFuture; @Slf4j @Component @EnableScheduling +@RequiredArgsConstructor public class JobScheduler { + private final JobbService jobbService; + @Autowired private final TaskScheduler taskScheduler; private ScheduledFuture scheduledFuture; - public JobScheduler(TaskScheduler taskScheduler) { - this.taskScheduler = taskScheduler; - } + private String intervall = "1"; /** * Funksjon som henter ut en intervallet (Som skal være en verdi med gyldig cron-expression) fra databasen. @@ -35,23 +37,39 @@ public JobScheduler(TaskScheduler taskScheduler) { @EventListener(ApplicationReadyEvent.class) public void scheduleTask(){ //Hent ut intervall fra databasen, eller sett default-verdi + log.info("Alle parametere: {}", jobbService.hentAlleParametere().toString()); + + List parametere = jobbService.hentAlleParametere(); + parametere.forEach(param -> { + if(param.getNavn().equals("intervall")){ + log.info("Parameter-verdi for intervall: {}", param.getVerdi()); + String nyttIntervall = param.getVerdi(); + if (!intervall.equals(nyttIntervall)) { + this.intervall = nyttIntervall; + } - log.info("Schedulet en task!"); - rescheduleTask("0 * * ? * MON-FRI"); + rescheduleTask(intervall); + } + }); } /** * Avslutter nåværende schedule og starter en ny med det nye intervallet. * Forutsetning at parameter allerede er på riktig cron-expression format. - * @param cronExpression Det nye intervallet + * @param intervallet Heltall som representerer antall timer forsinkelse */ - public void rescheduleTask(String cronExpression){ + public void rescheduleTask(String intervallet){ if (scheduledFuture != null) { scheduledFuture.cancel(true); } + String cronExpression = lagCronExpression(intervallet); scheduledFuture = taskScheduler.schedule(new Job(), new CronTrigger(cronExpression)); + log.info("Schedulet en task med intervall: {}", cronExpression); } + /** + * Jobb som kan kjøres når den blir kalt på av en scheduler + */ private static class Job implements Runnable { @Override @@ -60,4 +78,13 @@ public void run() { log.info("Jobb kjørte! Holder på å ansette folk nå!"); } } + + /** + * Formatterer en cron-expression for å kjøre en jobb hver x. time + * @param intervallet Heltall som representerer antall timer forsinkelse + * @return Ferdig formattert og gyldig cron-expression + */ + private String lagCronExpression(String intervallet) { + return "0 */" + intervallet + " * ? * MON-FRI"; + } }