From 1ce4c67b9c886e447c7a033d4bcdfdd4b40fcb2d Mon Sep 17 00:00:00 2001 From: musketyr Date: Fri, 29 Nov 2024 17:19:32 +0100 Subject: [PATCH] ability to set default executor --- docs/guide/src/docs/asciidoc/usage.adoc | 10 ++++++++++ .../com/agorapulse/worker/WorkerConfiguration.java | 11 +++++++++++ .../java/com/agorapulse/worker/annotation/Cron.java | 4 ++-- .../com/agorapulse/worker/annotation/FixedDelay.java | 4 ++-- .../com/agorapulse/worker/annotation/FixedRate.java | 4 ++-- .../agorapulse/worker/annotation/InitialDelay.java | 4 ++-- .../java/com/agorapulse/worker/annotation/Job.java | 6 +++--- .../worker/configuration/DefaultJobConfiguration.java | 6 +++--- .../configuration/DefaultWorkerConfiguration.java | 11 +++++++++++ .../agorapulse/worker/convention/QueueProducer.java | 6 +++--- .../src/test/resources/application-virtual.yml | 2 ++ 11 files changed, 51 insertions(+), 17 deletions(-) create mode 100644 libs/micronaut-worker/src/test/resources/application-virtual.yml diff --git a/docs/guide/src/docs/asciidoc/usage.adoc b/docs/guide/src/docs/asciidoc/usage.adoc index 7bb6901e..1afb525f 100644 --- a/docs/guide/src/docs/asciidoc/usage.adoc +++ b/docs/guide/src/docs/asciidoc/usage.adoc @@ -210,6 +210,16 @@ You can set the default queue type using the `worker.queue-type` configuration p include::{root-dir}/libs/micronaut-worker/src/test/resources/application-local.yml[] ---- +You can override the default scheduler (`TaskExecutors.SCHEDULED`) by setting the `worker.scheduler` property. + +[source,yaml] +.Setting the Default Scheduler +---- +include::{root-dir}/libs/micronaut-worker/src/test/resources/application-virtual.yml[] +---- + +TIP: You can let your jobs executed using virtual threads by using `virtual` executor. + === Job Configuration Anything you can configure using annotations can be configured externally. diff --git a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/WorkerConfiguration.java b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/WorkerConfiguration.java index ddce4505..6601ac05 100644 --- a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/WorkerConfiguration.java +++ b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/WorkerConfiguration.java @@ -17,8 +17,12 @@ */ package com.agorapulse.worker; +import io.micronaut.scheduling.TaskExecutors; + public interface WorkerConfiguration { + String DEFAULT_SCHEDULER = TaskExecutors.SCHEDULED; + WorkerConfiguration ENABLED = new WorkerConfiguration() { @Override public boolean isEnabled() { @@ -30,6 +34,11 @@ public String getQueueType() { return null; } + @Override + public String getScheduler() { + return DEFAULT_SCHEDULER; + } + }; boolean isEnabled(); @@ -39,4 +48,6 @@ public String getQueueType() { */ String getQueueType(); + String getScheduler(); + } diff --git a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/Cron.java b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/Cron.java index b84b68ab..4851ebc4 100644 --- a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/Cron.java +++ b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/Cron.java @@ -17,8 +17,8 @@ */ package com.agorapulse.worker.annotation; +import com.agorapulse.worker.WorkerConfiguration; import io.micronaut.context.annotation.AliasFor; -import io.micronaut.scheduling.TaskExecutors; import jakarta.inject.Named; import java.lang.annotation.Documented; @@ -49,6 +49,6 @@ * {@link java.util.concurrent.ScheduledExecutorService} to use to schedule the task */ @AliasFor(annotation = Job.class, member = "scheduler") - String scheduler() default TaskExecutors.SCHEDULED; + String scheduler() default WorkerConfiguration.DEFAULT_SCHEDULER; } diff --git a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/FixedDelay.java b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/FixedDelay.java index 896e40c0..e78a497d 100644 --- a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/FixedDelay.java +++ b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/FixedDelay.java @@ -17,8 +17,8 @@ */ package com.agorapulse.worker.annotation; +import com.agorapulse.worker.WorkerConfiguration; import io.micronaut.context.annotation.AliasFor; -import io.micronaut.scheduling.TaskExecutors; import jakarta.inject.Named; import java.lang.annotation.Documented; @@ -49,6 +49,6 @@ * {@link java.util.concurrent.ScheduledExecutorService} to use to schedule the task */ @AliasFor(annotation = Job.class, member = "scheduler") - String scheduler() default TaskExecutors.SCHEDULED; + String scheduler() default WorkerConfiguration.DEFAULT_SCHEDULER; } diff --git a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/FixedRate.java b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/FixedRate.java index cc0e480c..7a53810d 100644 --- a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/FixedRate.java +++ b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/FixedRate.java @@ -17,8 +17,8 @@ */ package com.agorapulse.worker.annotation; +import com.agorapulse.worker.WorkerConfiguration; import io.micronaut.context.annotation.AliasFor; -import io.micronaut.scheduling.TaskExecutors; import jakarta.inject.Named; import java.lang.annotation.Documented; @@ -49,6 +49,6 @@ * {@link java.util.concurrent.ScheduledExecutorService} to use to schedule the task */ @AliasFor(annotation = Job.class, member = "scheduler") - String scheduler() default TaskExecutors.SCHEDULED; + String scheduler() default WorkerConfiguration.DEFAULT_SCHEDULER; } diff --git a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/InitialDelay.java b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/InitialDelay.java index 07acfb05..e7f1afb4 100644 --- a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/InitialDelay.java +++ b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/InitialDelay.java @@ -17,8 +17,8 @@ */ package com.agorapulse.worker.annotation; +import com.agorapulse.worker.WorkerConfiguration; import io.micronaut.context.annotation.AliasFor; -import io.micronaut.scheduling.TaskExecutors; import jakarta.inject.Named; import java.lang.annotation.Documented; @@ -49,6 +49,6 @@ * {@link java.util.concurrent.ScheduledExecutorService} to use to schedule the task */ @AliasFor(annotation = Job.class, member = "scheduler") - String scheduler() default TaskExecutors.SCHEDULED; + String scheduler() default WorkerConfiguration.DEFAULT_SCHEDULER; } diff --git a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/Job.java b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/Job.java index bcf712eb..a36022ae 100644 --- a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/Job.java +++ b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/annotation/Job.java @@ -17,11 +17,11 @@ */ package com.agorapulse.worker.annotation; +import com.agorapulse.worker.WorkerConfiguration; import io.micronaut.context.annotation.AliasFor; import io.micronaut.context.annotation.Executable; import io.micronaut.context.annotation.Parallel; import io.micronaut.core.annotation.EntryPoint; -import io.micronaut.scheduling.TaskExecutors; import jakarta.inject.Named; import java.lang.annotation.Documented; @@ -45,7 +45,7 @@ /** * Allows to override the default name of the job which is JobClassName if there is only one executable * method (e.g. job definition) in the class or JobClassName-methodName if there is more then one executable method in the class. - * + *

* Either the job name specified here or the default name is converted using {@link io.micronaut.core.naming.NameUtils#hyphenate(String)}. * * @return the name of the job used for configuration @@ -86,6 +86,6 @@ * @return The name of a {@link jakarta.inject.Named} bean that is a * {@link java.util.concurrent.ScheduledExecutorService} to use to schedule the task */ - String scheduler() default TaskExecutors.SCHEDULED; + String scheduler() default WorkerConfiguration.DEFAULT_SCHEDULER; } diff --git a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/configuration/DefaultJobConfiguration.java b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/configuration/DefaultJobConfiguration.java index ed44e271..7390ea94 100644 --- a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/configuration/DefaultJobConfiguration.java +++ b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/configuration/DefaultJobConfiguration.java @@ -26,7 +26,6 @@ import io.micronaut.context.annotation.EachProperty; import io.micronaut.context.annotation.Parameter; import io.micronaut.core.util.StringUtils; -import io.micronaut.scheduling.TaskExecutors; import jakarta.annotation.Nullable; import jakarta.validation.constraints.Min; @@ -133,7 +132,7 @@ public void mergeWith(ConsumerQueueConfiguration overrides) { @Nullable private Duration fixedDelay; @Nullable private Duration initialDelay; @Nullable private Duration fixedRate; - @NotBlank private String scheduler = TaskExecutors.SCHEDULED; + @NotBlank private String scheduler; @Positive private int fork = 1; @@ -147,6 +146,7 @@ public DefaultJobConfiguration(@Parameter String name, WorkerConfiguration worke this.enabled = workerConfiguration.isEnabled(); this.consumer.setQueueType(workerConfiguration.getQueueType()); this.producer.setQueueType(workerConfiguration.getQueueType()); + this.scheduler = workerConfiguration.getScheduler(); this.name = name; } @@ -324,7 +324,7 @@ public JobConfiguration mergeWith(JobConfiguration overrides) { this.initialDelay = overrides.getInitialDelay(); } - if (overrides.getScheduler() != null && !overrides.getScheduler().equals(TaskExecutors.SCHEDULED)) { + if (overrides.getScheduler() != null && !overrides.getScheduler().equals(WorkerConfiguration.DEFAULT_SCHEDULER)) { this.scheduler = overrides.getScheduler(); } diff --git a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/configuration/DefaultWorkerConfiguration.java b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/configuration/DefaultWorkerConfiguration.java index 75b75e6b..13bc9e3e 100644 --- a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/configuration/DefaultWorkerConfiguration.java +++ b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/configuration/DefaultWorkerConfiguration.java @@ -26,6 +26,7 @@ public class DefaultWorkerConfiguration implements WorkerConfiguration { private boolean enabled; private String queueType; + private String scheduler = WorkerConfiguration.DEFAULT_SCHEDULER; public DefaultWorkerConfiguration(Environment env) { // disable for tests and functions @@ -51,4 +52,14 @@ public String getQueueType() { public void setQueueType(String queueType) { this.queueType = queueType; } + + @Override + public String getScheduler() { + return scheduler; + } + + public void setScheduler(String scheduler) { + this.scheduler = scheduler; + } + } diff --git a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/convention/QueueProducer.java b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/convention/QueueProducer.java index 6d649d90..94788d09 100644 --- a/libs/micronaut-worker/src/main/java/com/agorapulse/worker/convention/QueueProducer.java +++ b/libs/micronaut-worker/src/main/java/com/agorapulse/worker/convention/QueueProducer.java @@ -17,10 +17,10 @@ */ package com.agorapulse.worker.convention; +import com.agorapulse.worker.WorkerConfiguration; import com.agorapulse.worker.annotation.Job; import com.agorapulse.worker.annotation.Produces; import io.micronaut.context.annotation.AliasFor; -import io.micronaut.scheduling.TaskExecutors; import jakarta.inject.Named; import java.lang.annotation.Documented; @@ -46,7 +46,7 @@ /** * Allows to override the default name of the job which is JobClassName if there is only one executable * method (e.g. job definition) in the class or JobClassName-methodName if there is more then one executable method in the class. - * + *

* Either the job name specified here or the default name is converted using {@link io.micronaut.core.naming.NameUtils#hyphenate(String)}. * * @return the name of the job used for configuration @@ -98,6 +98,6 @@ * {@link java.util.concurrent.ScheduledExecutorService} to use to schedule the task */ @AliasFor(annotation = Job.class, member = "scheduler") - String scheduler() default TaskExecutors.SCHEDULED; + String scheduler() default WorkerConfiguration.DEFAULT_SCHEDULER; } diff --git a/libs/micronaut-worker/src/test/resources/application-virtual.yml b/libs/micronaut-worker/src/test/resources/application-virtual.yml new file mode 100644 index 00000000..6b93d147 --- /dev/null +++ b/libs/micronaut-worker/src/test/resources/application-virtual.yml @@ -0,0 +1,2 @@ +worker: + scheduler: virtual