package Ġcom . lyn as Ċ Ċ import Ġcom . github . ben man es . caffe ine . cache . C affe ine Ċ import Ġorg . springframework . boot . autoconfigure . SpringBoot Application Ċ import Ġorg . springframework . boot . run Application Ċ import Ġorg . springframework . cache . CacheManager Ċ import Ġorg . springframework . cache . annotation . Cache Config Ċ import Ġorg . springframework . cache . annotation . Cache Ev ict Ċ import Ġorg . springframework . cache . annotation . Cache able Ċ import Ġorg . springframework . cache . annotation . Enable Caching Ċ import Ġorg . springframework . cache . caffe ine . C affe ine CacheManager Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . data . repository . Crud Repository Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . web . bind . annotation . GetMapping Ċ import Ġorg . springframework . web . bind . annotation . PathVariable Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . persistence . Entity Ċ import Ġjavax . persistence . Id ĊĊ Ċ @ Enable Caching Ċ @ SpringBoot Application Ċ class ĠDemo Cache Non Reactive Application Ċ Ċ @ Configuration Ċ class ĠApp Config Ġ{ ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġfun Ġcache Manager (): ĠCache Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠC affe ine CacheManager (" Student ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Allow Null Values Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset C affe ine ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC affe ine . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. maximum Size ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expire After Access ( 1 , ĠTimeUnit . HOUR S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġrun Application < Demo Cache Non Reactive Application >(* args ) Ċ } Ċ Ċ @ Entity Ċ data Ġclass ĠStudent ( ĊĊĠĠĠ Ġ@ Id ĊĠĠĠ Ġval Ġid : ĠLong ?, ĊĠĠĠ Ġval Ġname : ĠString Ċ ) Ċ Ċ interface ĠStudent Repository Ġ: ĠCr ud Repository < Student , ĠLong > Ċ Ċ @ Service Ċ @ Cache Config ( cache Names Ġ= Ġ[" Student "]) Ċ class ĠStudent Service ( val Ġstudent Repository : ĠStudent Repository ) Ġ{ ĊĊĠĠĠ Ġ@ Cache able ( key Ġ= Ġ"# id ") ĊĠĠĠ Ġfun Ġfind Student ById ( id : ĠLong ) Ġ= Ġstudent Repository . findById ( id ) ĊĊĠĠĠ Ġ@ Cache Ev ict ( key Ġ= Ġ"# id ") ĊĠĠĠ Ġfun Ġupdate Student ( id : ĠLong , Ġstudent : ĠStudent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Student Ġ= Ġthis . find Student ById ( id ). get (). copy ( name Ġ= Ġstudent . name ) ĊĠĠĠĠĠĠĠ Ġstudent Repository . save ( existing Student ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ RestController Ċ class ĠStudent Controller ( val Ġstudent Service : ĠStudent Service , Ġval Ġcache Manager : ĠCache Manager ) Ġ{ ĊĊĠĠĠ Ġ@ GetMapping ("/ { id }") ĊĠĠĠ Ġfun Ġget Student (@ PathVariable Ġid : ĠLong ) Ġ= Ġstudent Service . find Student ById ( id ) ĊĊĠĠĠ Ġ@ GetMapping ("/ update /{ id }") ĊĠĠĠ Ġfun Ġupdate Student (@ PathVariable Ġid : ĠLong ) Ġ= ĊĠĠĠĠĠĠĠ Ġstudent Service . update Student ( id , ĠStudent ( id , Ġ" Name Ġ${ UUID . randomUUID ()} ")) ĊĊĊĠĠĠ Ġ@ GetMapping ("/ all ") ĊĠĠĠ Ġfun Ġall Cache (): ĠMutable Collection < String > Ġ= Ġcache Manager . cache Names Ċ }