How to schedule tasks in Ktor microservice app
Asked Answered
S

1

9

I am trying to schedule a task in my Ktor application, however I have not been able to find anything online about how to do this. Does anyone have any recommendations or been able to do this before?

Standard answered 5/11, 2019 at 18:56 Comment(0)
K
6

Ktor doesn't have a built-in scheduler, so you'd have to implement your own.

I've written a small class using Java's Executors for this task for myself, you might find it useful:

class Scheduler(private val task: Runnable) {
    private val executor = Executors.newScheduledThreadPool(1)!!

    fun scheduleExecution(every: Every) {

        val taskWrapper = Runnable {
            task.run()
        }

        executor.scheduleWithFixedDelay(taskWrapper, every.n, every.n, every.unit)
    }


    fun stop() {
        executor.shutdown()

        try {
            executor.awaitTermination(1, TimeUnit.HOURS)
        } catch (e: InterruptedException) {
        }

    }
}

data class Every(val n: Long, val unit: TimeUnit)
Knowitall answered 5/11, 2019 at 19:47 Comment(3)
awesome this works. Currently I am starting the Runnable when an api call is made. Is there a way to have the runnable running at all times?Standard
Could you please elaborate on what you mean by "runnable running at all times"? You mean as soon as you create Scheduler? You could create init {} block and scheduleExecution in itKnowitall
Evgeny, please provide how to call it from running threadCourson

© 2022 - 2024 — McMap. All rights reserved.