From 248717cb45af160055068ec75f282f7c3c1e665b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Thu, 14 Mar 2024 09:34:26 +0100 Subject: [PATCH] Implement single scheduler and send simple msg to ntfy --- backend/pom.xml | 5 +++ .../java/core/services/ntfy/NtfyTask.java | 27 ++++++++++-- .../services/ntfy/TaskSchedulingService.java | 41 +++++++++++++------ 3 files changed, 58 insertions(+), 15 deletions(-) diff --git a/backend/pom.xml b/backend/pom.xml index 18787b6..4881f78 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -21,6 +21,11 @@ org.springframework.boot spring-boot-starter-data-jpa + + org.quartz-scheduler + quartz + 2.3.2 + org.springframework.boot spring-boot-starter-security diff --git a/backend/src/main/java/core/services/ntfy/NtfyTask.java b/backend/src/main/java/core/services/ntfy/NtfyTask.java index 603f9e7..3e86fe6 100644 --- a/backend/src/main/java/core/services/ntfy/NtfyTask.java +++ b/backend/src/main/java/core/services/ntfy/NtfyTask.java @@ -1,8 +1,29 @@ package core.services.ntfy; -public class NtfyTask implements Runnable{ +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import java.io.IOException; +import java.net.*; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +public class NtfyTask implements Job { @Override - public void run() { - System.out.println("A little Test"); + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + HttpClient httpClient = HttpClient.newHttpClient(); + + try { + HttpRequest request = HttpRequest.newBuilder() + .uri(new URI("http://localhost:4280/Test")) + .POST(HttpRequest.BodyPublishers.ofString("A simple testmessage")) + .build(); + + httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } } } diff --git a/backend/src/main/java/core/services/ntfy/TaskSchedulingService.java b/backend/src/main/java/core/services/ntfy/TaskSchedulingService.java index c0c0f06..63f152a 100644 --- a/backend/src/main/java/core/services/ntfy/TaskSchedulingService.java +++ b/backend/src/main/java/core/services/ntfy/TaskSchedulingService.java @@ -1,21 +1,38 @@ package core.services.ntfy; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.TaskScheduler; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import org.springframework.scheduling.support.CronTrigger; -import java.util.HashMap; -import java.util.Map; -import java.util.TimeZone; -import java.util.concurrent.ScheduledFuture; +import org.quartz.*; +import org.quartz.impl.StdSchedulerFactory; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; public class TaskSchedulingService { - public static void scheduleTask() { - ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); - threadPoolTaskScheduler.initialize(); - threadPoolTaskScheduler.schedule(new NtfyTask(), new CronTrigger("0 0/1 * 1/1 * *")); + public static void scheduleTask() throws SchedulerException { + Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); + scheduler.start(); + + JobDetail job = JobBuilder.newJob(NtfyTask.class).withIdentity("Job 1", "Group 1").build(); + JobDetail job2 = JobBuilder.newJob(NtfyTask.class).withIdentity("Job 2", "Group 1").build(); + + LocalDateTime executionTime = LocalDateTime.of(2024, 3, 14, 9, 18); // Example: March 15, 2024, 10:00 AM + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity("trigger1", "Group 1") + .startAt(calculateDelayInMillis(executionTime)).build(); + Trigger trigger2 = TriggerBuilder.newTrigger() + .withIdentity("trigger2", "Group 1") + .startAt(calculateDelayInMillis(executionTime.plusMinutes(1))).build(); + + Trigger immediatly = TriggerBuilder.newTrigger().withIdentity("Immediately", "Group 1").startNow().build(); + + scheduler.scheduleJob(job, immediatly); } + + private static Date calculateDelayInMillis(LocalDateTime executionTime) { + return Date.from(executionTime.atZone(ZoneId.systemDefault()).toInstant()); + } }