CommandScheduler
is part of Fault tolerance, what you need is ScheduledThreadPoolSupplier
.
To make it little prettier with reactive api(works in both flavors of Helidon 2.x):
ScheduledThreadPoolSupplier scheduledThreadPoolSupplier =
ScheduledThreadPoolSupplier.builder()
.threadNamePrefix("scheduled-test-")
.corePoolSize(2)
.build();
Multi.interval(5, TimeUnit.SECONDS, scheduledThreadPoolSupplier.get())
.map(l -> "invocation number " + l)
// max number of invocations
.limit(5)
.forEach(s -> System.out.println("Scheduled " + s))
.await();
scheduledThreadPoolSupplier.get().shutdown();
> Scheduled invocation number 0
> Scheduled invocation number 1
> Scheduled invocation number 2
> Scheduled invocation number 3
> Scheduled invocation number 4
But be aware! This job would be scheduled on every instance of your service, I would suggest to check out Kubernetes CronJobs first.
https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
Happy coding!