package Ġcom . github . kur ty an . gu it arch in ah unter . schedule ; Ċ Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġy an ke Ġon Ġ 2 0 1 6 / 4 / 1 9 . Ċ Ġ*/ Ċ class ĠInterval Aware Run able W apper ( val Ġconfig List : ĠList < Interval Config >, Ġ Ġval Ġdefault Interval In Millis : ĠLong , Ġval Ġcommand : ĠRunnable ) Ġ: ĠRunnable Ġ{ ĊĊĠĠĠ Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( java Class ) ĊĠĠĠ Ġvar Ġlast R an In Millis Ġ= Ġ 0 L ; ĊĠĠĠ Ġvar Ġinvoke Time Provider : Ġ() Ġ-> ĠLong Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . currentTimeMillis () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Run ( now : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal Time Now Ġ= ĠLocalDateTime . of Instant ( Instant . of Epoch Milli ( now ), ĠZone Id . of (" GMT + 8 ")). to Local Time () ĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= Ġconfig List . first OrNull Ġ{ Ġit . contains ( local Time Now ) Ġ} ?. interval In M ills Ġ?: Ġdefault Interval In Millis ĊĠĠĠĠĠĠĠ Ġval Ġshould Run Ġ= Ġnow Ġ- Ġlast R an In Millis Ġ> Ġinterval ; ĊĊĠĠĠĠĠĠĠ Ġlog . debug (" local Time Now Ġis Ġ{}, Ġinterval Ġis Ġ{}", Ġlocal Time Now , Ġinterval ) ĊĠĠĠĠĠĠĠ Ġlog . debug (" last R an Ġis Ġ{}, Ġshould Run : Ġ{}", ĠLocalDateTime . of Instant ( Instant . of Epoch Milli ( last R an In Millis ), ĠZone Id . of (" GMT + 8 ")), Ġshould Run ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġshould Run ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġrun (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= Ġinvoke Time Provider . invoke () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . should Run ( now )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast R an In Millis Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ