package Ġio . ple o . ant ae us . core . scheduler Ċ Ċ import Ġit . just w rote . k job . K Job Ċ import Ġit . just w rote . k job . K ron Job Ċ import Ġit . just w rote . k job . job . Job Execution Type Ċ import Ġit . just w rote . k job . k ron . K ron Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . util .* Ċ Ċ class ĠScheduler ( val Ġk job : ĠK Job ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger 1 Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠ Ġfun Ġk ron ( k ron Job : ĠK ron Job , Ġaction : Ġsuspend Ġ( date : ĠDate ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġk job ( K ron ). k ron ( k ron Job ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecution Type Ġ= ĠJob Execution Type . NON _ BLOCK ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Retries Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( Date ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. onError Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġerrors Ġwill Ġautomatically Ġlogged Ġbut Ġwe Ġmight Ġwant Ġto Ġdo Ġsome Ġmetrics Ġor Ġsomething ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger 1 . error Ġ{ Ġ" Oh Ġno ! ĠOur Ġcode Ġfor Ġ$ job Name Ġwith Ġid Ġ$ jobId Ġfailed Ġus Ġwith Ġthe Ġexception Ġ$ error " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. onComplete Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlso Ġwe Ġcan Ġdefine Ġa Ġblock Ġthat Ġgets Ġexecuted Ġwhen Ġour Ġexecution Ġhas Ġbeen Ġfinished ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger 1 . info Ġ{ Ġ" Everything Ġfor Ġjob Ġ$ job Name Ġwith Ġid Ġ$ jobId Ġworked Ġout Ġas Ġplan ed !" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger 1 . info Ġ{ Ġ" The Ġexecution Ġtook Ġ${ time (). to Millis ()} ms " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ