From f0333c4e536adbbba167a57db4d3049e59570aa2 Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Mon, 22 Jul 2024 11:51:06 +0200 Subject: [PATCH 01/11] Oppdaterer postgre + legger til quartz scheduler --- apps/levende-arbeidsforhold-ansettelse/build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/levende-arbeidsforhold-ansettelse/build.gradle b/apps/levende-arbeidsforhold-ansettelse/build.gradle index d7334f25563..41f3e299c4c 100644 --- a/apps/levende-arbeidsforhold-ansettelse/build.gradle +++ b/apps/levende-arbeidsforhold-ansettelse/build.gradle @@ -61,7 +61,9 @@ dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-vault-config' implementation 'org.springframework.boot:spring-boot-starter-actuator' - implementation 'org.postgresql:postgresql:42.3.1' + implementation 'org.postgresql:postgresql:42.7.2' + + implementation 'org.quartz-scheduler:quartz:2.3.2' implementation 'io.micrometer:micrometer-registry-prometheus' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' From bd1f8e29546a250fa479fba2b3317b26ed6e627e Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Mon, 22 Jul 2024 12:36:19 +0200 Subject: [PATCH 02/11] Endrer dependency job scheduler --- .../build.gradle | 3 +-- .../scheduler/JobScheduler.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/scheduler/JobScheduler.java diff --git a/apps/levende-arbeidsforhold-ansettelse/build.gradle b/apps/levende-arbeidsforhold-ansettelse/build.gradle index 41f3e299c4c..a19e7c758e0 100644 --- a/apps/levende-arbeidsforhold-ansettelse/build.gradle +++ b/apps/levende-arbeidsforhold-ansettelse/build.gradle @@ -54,6 +54,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-webflux' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-quartz' implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' @@ -63,8 +64,6 @@ dependencies { implementation 'org.postgresql:postgresql:42.7.2' - implementation 'org.quartz-scheduler:quartz:2.3.2' - implementation 'io.micrometer:micrometer-registry-prometheus' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' implementation 'io.swagger.core.v3:swagger-annotations-jakarta:2.2.21' 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 new file mode 100644 index 00000000000..ad6706d53a8 --- /dev/null +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/scheduler/JobScheduler.java @@ -0,0 +1,21 @@ +package no.nav.registre.testnorge.levendearbeidsforholdansettelse.scheduler; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.TaskScheduler; + +@Slf4j +public class JobScheduler { + + public void rescheduleTask(String cronExpression){ + + } + + private class Job implements Runnable { + + @Override + public void run() { + //Kall på AnsettelseService her + log.info("Jobb kjørte!"); + } + } +} From 174b5d92fdf76e610161e4f3f66601a6973deb9b Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Mon, 22 Jul 2024 14:48:44 +0200 Subject: [PATCH 03/11] Legger til job-scheduler --- .../config/SchedulerConfig.java | 18 +++++++ .../scheduler/JobScheduler.java | 48 +++++++++++++++++-- 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/config/SchedulerConfig.java diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/config/SchedulerConfig.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/config/SchedulerConfig.java new file mode 100644 index 00000000000..bcb1916fd80 --- /dev/null +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/config/SchedulerConfig.java @@ -0,0 +1,18 @@ +package no.nav.registre.testnorge.levendearbeidsforholdansettelse.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; + +@Configuration +public class SchedulerConfig { + + @Bean + public TaskScheduler taskScheduler() { + ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); + taskScheduler.setPoolSize(1); + taskScheduler.setThreadNamePrefix("taskScheduler-"); + return taskScheduler; + } +} 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 ad6706d53a8..2e6e83602ba 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 @@ -1,21 +1,63 @@ package no.nav.registre.testnorge.levendearbeidsforholdansettelse.scheduler; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; import org.springframework.scheduling.TaskScheduler; +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.concurrent.ScheduledFuture; @Slf4j +@Component +@EnableScheduling public class JobScheduler { - public void rescheduleTask(String cronExpression){ + @Autowired + private final TaskScheduler taskScheduler; + + private ScheduledFuture scheduledFuture; + + public JobScheduler(TaskScheduler taskScheduler) { + this.taskScheduler = taskScheduler; + } + /** + * Funksjon som henter ut en intervallet (Som skal være en verdi med gyldig cron-expression) fra databasen. + * Funksjonen kalles når appen kjøres opp. + */ + @EventListener(ApplicationReadyEvent.class) + public void scheduleTask(){ + //Hent ut intervall fra databasen, eller sett default-verdi + + log.info("Schedulet en task!"); + rescheduleTask("0 * * ? * MON-FRI"); + } + + /** + * 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 + */ + public void rescheduleTask(String cronExpression){ + if (scheduledFuture != null) { + scheduledFuture.cancel(true); + } + scheduledFuture = taskScheduler.schedule(new Job(), new CronTrigger(cronExpression)); } - private class Job implements Runnable { + private static class Job implements Runnable { @Override public void run() { //Kall på AnsettelseService her - log.info("Jobb kjørte!"); + log.info("Jobb kjørte! Holder på å ansette folk nå!"); } } } From d1e7ee0e375705326cf33f516caccd48beadd7d4 Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Mon, 22 Jul 2024 15:52:02 +0200 Subject: [PATCH 04/11] La til data-migrasjon av in-memory database --- .../src/main/resources/data.sql | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/resources/data.sql b/apps/levende-arbeidsforhold-ansettelse/src/main/resources/data.sql index 430edc0cb11..39c72f60974 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/resources/data.sql +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/resources/data.sql @@ -1,10 +1,7 @@ -/* + INSERT INTO jobb_parameter (NAVN, TEKST, VERDI) VALUES ('antallOrganisasjoner', 'Organisasjoner', '100'), ('antallPersoner', 'Personer', '20'), ('typeArbeidsforhold', 'Type Arbeidsforhold', 'ordinaertArbeidsforhold'), ('arbeidstidsOrdning', 'Arbeidstids Ordning', 'ikkeSkift'), - ('stillingsprosent', 'Stillingsprosent', '100.0'); - - - - */ \ No newline at end of file + ('intervall', 'Intervall', '2'), + ('stillingsprosent', 'Stillingsprosent', '100.0'); \ No newline at end of file From 51bd452f5f305e90dc26368d2ca2e0e83c9746bf Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Mon, 22 Jul 2024 15:53:28 +0200 Subject: [PATCH 05/11] =?UTF-8?q?Fikset=20navn=20p=C3=A5=20tabellen=20for?= =?UTF-8?q?=20at=20ORM-en=20skal=20finne=20den?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/JobbParameterEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/entity/JobbParameterEntity.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/entity/JobbParameterEntity.java index f0caaeef483..a90074e01fe 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/entity/JobbParameterEntity.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/entity/JobbParameterEntity.java @@ -16,7 +16,7 @@ @NoArgsConstructor @Getter @Setter -@Table(name = "JOBB_PARAMETER") +@Table(name = "jobb_parameter") public class JobbParameterEntity implements Serializable { /* @Id From 73e198dea492b25900b8a9cde743d03e60b00f15 Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Mon, 22 Jul 2024 15:55:21 +0200 Subject: [PATCH 06/11] 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"; + } } From e562264b438bdd573a1c1e525ad285861572e4e2 Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Tue, 23 Jul 2024 10:38:35 +0200 Subject: [PATCH 07/11] Legger til pseudo-kode for logikk av "vedlikehold-nedetid" --- .../scheduler/JobScheduler.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 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 65a33e1d2de..269fd3d9061 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 @@ -67,15 +67,23 @@ public void rescheduleTask(String intervallet){ 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 { + /** + * Funksjon som automatisk blir kalt på av en task-scheduler og kjører ansettelsesservice utenom lørdag fra + * klokken 12:00 til mandag klokken 06:00 + */ @Override public void run() { - //Kall på AnsettelseService her - log.info("Jobb kjørte! Holder på å ansette folk nå!"); + + /* + if (!((dag == mandag && clock <= 6AM) || (dag == lørdag && clock >= 12PM)) ){ + //Kall på AnsettelseService her + log.info("Jobb kjørte! Holder på å ansette folk nå!"); + } + */ + } } @@ -85,6 +93,6 @@ public void run() { * @return Ferdig formattert og gyldig cron-expression */ private String lagCronExpression(String intervallet) { - return "0 */" + intervallet + " * ? * MON-FRI"; + return "0 0 */" + intervallet + " ? * MON-SAT"; } } From e2fb8ec732317361f79852575ebad5b2bac29446 Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Tue, 23 Jul 2024 10:45:33 +0200 Subject: [PATCH 08/11] Legger til logikk for endring reschedule kun hvis det nye intervallet er forskjellig fra det eksisterende --- .../scheduler/JobScheduler.java | 10 +++------- 1 file changed, 3 insertions(+), 7 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 269fd3d9061..4abf5768ec5 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 @@ -43,11 +43,6 @@ public void scheduleTask(){ 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; - } - rescheduleTask(intervall); } }); @@ -59,10 +54,11 @@ public void scheduleTask(){ * @param intervallet Heltall som representerer antall timer forsinkelse */ public void rescheduleTask(String intervallet){ - if (scheduledFuture != null) { + if (scheduledFuture != null && !intervallet.equals(intervall)) { scheduledFuture.cancel(true); + this.intervall = intervallet; } - String cronExpression = lagCronExpression(intervallet); + String cronExpression = lagCronExpression(intervall); scheduledFuture = taskScheduler.schedule(new Job(), new CronTrigger(cronExpression)); log.info("Schedulet en task med intervall: {}", cronExpression); } From 217f2ee114f31aeac19e85434bcf476f4ce2a97f Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Tue, 23 Jul 2024 10:59:55 +0200 Subject: [PATCH 09/11] Fjernet data-medlem som holder intervallet + fikset bug fordi sendte med feil argument til reschedule i schedule funksjonen --- .../scheduler/JobScheduler.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 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 4abf5768ec5..c6e58ddae79 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 @@ -28,11 +28,9 @@ public class JobScheduler { private ScheduledFuture scheduledFuture; - private String intervall = "1"; - /** - * Funksjon som henter ut en intervallet (Som skal være en verdi med gyldig cron-expression) fra databasen. - * Funksjonen kalles når appen kjøres opp. + * Funksjon som henter ut en intervallet fra databasen. + * Funksjonen kalles når appen kjøres opp og vil kun ha en effekt dersom intervallet eksisterer i databasen. */ @EventListener(ApplicationReadyEvent.class) public void scheduleTask(){ @@ -40,9 +38,12 @@ public void scheduleTask(){ 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 intervall = param.getVerdi(); + log.info("Parameter-verdi for intervall: {}", intervall); rescheduleTask(intervall); } }); @@ -51,16 +52,19 @@ public void scheduleTask(){ /** * Avslutter nåværende schedule og starter en ny med det nye intervallet. * Forutsetning at parameter allerede er på riktig cron-expression format. - * @param intervallet Heltall som representerer antall timer forsinkelse + * @param intervall Heltall som representerer antall timer forsinkelse */ - public void rescheduleTask(String intervallet){ - if (scheduledFuture != null && !intervallet.equals(intervall)) { + public void rescheduleTask(String intervall){ + + if (scheduledFuture != null) { scheduledFuture.cancel(true); - this.intervall = intervallet; } + + //TODO: Sjekk om intervallet er positivt heltall før vi lager cron-expression osv String cronExpression = lagCronExpression(intervall); scheduledFuture = taskScheduler.schedule(new Job(), new CronTrigger(cronExpression)); log.info("Schedulet en task med intervall: {}", cronExpression); + } @@ -76,10 +80,10 @@ public void run() { /* if (!((dag == mandag && clock <= 6AM) || (dag == lørdag && clock >= 12PM)) ){ //Kall på AnsettelseService her - log.info("Jobb kjørte! Holder på å ansette folk nå!"); + } */ - + log.info("Jobb kjørte!"); } } From 37b69c12ecb4e85c7d7fb534e908078d92c4ec25 Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Tue, 23 Jul 2024 13:15:11 +0200 Subject: [PATCH 10/11] =?UTF-8?q?=C3=98ker=20antall=20threads=20i=20fors?= =?UTF-8?q?=C3=B8k=C3=A5=20=C3=A5=20unng=C3=A5=20starvation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../levendearbeidsforholdansettelse/config/SchedulerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/config/SchedulerConfig.java b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/config/SchedulerConfig.java index bcb1916fd80..1c3784782d2 100644 --- a/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/config/SchedulerConfig.java +++ b/apps/levende-arbeidsforhold-ansettelse/src/main/java/no/nav/registre/testnorge/levendearbeidsforholdansettelse/config/SchedulerConfig.java @@ -11,7 +11,7 @@ public class SchedulerConfig { @Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); - taskScheduler.setPoolSize(1); + taskScheduler.setPoolSize(10); taskScheduler.setThreadNamePrefix("taskScheduler-"); return taskScheduler; } From d144c75c2788e465bed78565729151eb47dfdae1 Mon Sep 17 00:00:00 2001 From: ulrikHesmyr Date: Wed, 24 Jul 2024 07:04:06 +0200 Subject: [PATCH 11/11] Legger til validering om intervallet er positivt heltall + legger til const variabler for default intervall og for parameter-navnet til intervall --- .../scheduler/JobScheduler.java | 59 +++++++++++++------ 1 file changed, 41 insertions(+), 18 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 c6e58ddae79..2ed462a118d 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 @@ -28,6 +28,9 @@ public class JobScheduler { private ScheduledFuture scheduledFuture; + private static final String DEFAULT_INTERVALL = "24"; + private static final String INTERVALL_PARAM_NAVN = "intervall"; + /** * Funksjon som henter ut en intervallet fra databasen. * Funksjonen kalles når appen kjøres opp og vil kun ha en effekt dersom intervallet eksisterer i databasen. @@ -39,9 +42,8 @@ public void scheduleTask(){ List parametere = jobbService.hentAlleParametere(); - parametere.forEach(param -> { - if(param.getNavn().equals("intervall")){ + if(param.getNavn().equals(INTERVALL_PARAM_NAVN)){ String intervall = param.getVerdi(); log.info("Parameter-verdi for intervall: {}", intervall); rescheduleTask(intervall); @@ -51,8 +53,7 @@ public void scheduleTask(){ /** * Avslutter nåværende schedule og starter en ny med det nye intervallet. - * Forutsetning at parameter allerede er på riktig cron-expression format. - * @param intervall Heltall som representerer antall timer forsinkelse + * @param intervall Heltall som representerer antall timer forsinkelse for job-scheduleren */ public void rescheduleTask(String intervall){ @@ -60,15 +61,46 @@ public void rescheduleTask(String intervall){ scheduledFuture.cancel(true); } - //TODO: Sjekk om intervallet er positivt heltall før vi lager cron-expression osv - String cronExpression = lagCronExpression(intervall); - scheduledFuture = taskScheduler.schedule(new Job(), new CronTrigger(cronExpression)); + String cronExpression; + if (intervallErHeltall(intervall)){ + cronExpression = lagCronExpression(intervall); + } else { + cronExpression = lagCronExpression(DEFAULT_INTERVALL); + } + + scheduledFuture = taskScheduler.schedule(new AnsettelseJobb(), new CronTrigger(cronExpression)); log.info("Schedulet en task med intervall: {}", cronExpression); } + /** + * 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 0 */" + intervallet + " ? * MON-SAT"; + } + + /** + * Funksjon som validerer om intervall er et positivt heltall. Brukes kun i this.rescheduleTask() metoden. + * @param intervall Heltall som representerer antall timer forsinkelse for job-scheduleren + * @return true hvis intervallet er et positivt heltall og false hvis ikke + */ + private static boolean intervallErHeltall(String intervall) { + try { + Integer.parseInt(intervall); + } catch (NumberFormatException e) { + return false; + } + return true; + } - private static class Job implements Runnable { + + /** + * Klasse for jobben som skal kjøres av scheduler + */ + private static class AnsettelseJobb implements Runnable { /** * Funksjon som automatisk blir kalt på av en task-scheduler og kjører ansettelsesservice utenom lørdag fra @@ -78,21 +110,12 @@ private static class Job implements Runnable { public void run() { /* - if (!((dag == mandag && clock <= 6AM) || (dag == lørdag && clock >= 12PM)) ){ + if (!((dag == mandag && clock <= 6AM) || (dag == søndag) || (dag == lørdag && clock >= 12PM)) ){ //Kall på AnsettelseService her - } */ log.info("Jobb kjørte!"); } } - /** - * 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 0 */" + intervallet + " ? * MON-SAT"; - } }