@Scheduled
アノテーションを使ってタスクを定期実行し、キャッシュの値を定期的にクリアしています。
設定値(application.properties)
- 簡単に確認出来るインメモリキャッシュを設定しています
spring.cache.type=simple
サンプルコード
@Scheduled
で10秒毎にキャッシュをクリアするタスクを実行しています- 同時に
@CacheEvict
を設定して、削除対象のキャッシュ名とすべてのエントリを削除するようにしています
@SpringBootApplication @EnableCaching @EnableScheduling class CacheDemoApplication fun main(args: Array<String>) { runApplication<CacheDemoApplication>(*args) } @RestController @RequestMapping("/sample") class SampleController(private val sampleService: SampleService) { val logger = LoggerFactory.getLogger(SampleController::class.java) @GetMapping fun toUpper(@RequestParam("value") value: String): String { logger.info("value: $value") return sampleService.toUpper(value) } } @Service class SampleService { val logger = LoggerFactory.getLogger(SampleService::class.java) @Cacheable("toupper") fun toUpper(value: String): String { TimeUnit.SECONDS.sleep(1) val upper = value.toUpperCase() logger.info("$value --> $upper") return upper } } @Component class SampleClearCache { val logger = LoggerFactory.getLogger(SampleClearCache::class.java) @Scheduled(fixedRateString = "PT10S", initialDelayString = "PT10S") @CacheEvict(value = ["toupper"], allEntries = true) fun clearCache(): Unit { logger.info("clear cache") } }
実行結果
- 初回はServiceが実行され、それ以降はServiceの実行が行われずキャッシュの値が使われていることがわかります
- スケジュールなタスクでキャッシュのクリアが行われると、Serviceが実行されていることがわかります
- スケジュールなタスクが指定された時間(10秒)毎に実行されていることがわかります
2019-03-23 07:28:07.930 INFO 26010 --- [nio-8080-exec-7] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:08.931 INFO 26010 --- [nio-8080-exec-7] siosio.cachedemo.SampleService : a --> A 2019-03-23 07:28:09.220 INFO 26010 --- [nio-8080-exec-8] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:09.993 INFO 26010 --- [nio-8080-exec-9] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:10.665 INFO 26010 --- [io-8080-exec-10] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:11.680 INFO 26010 --- [nio-8080-exec-2] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:12.399 INFO 26010 --- [nio-8080-exec-1] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:13.220 INFO 26010 --- [nio-8080-exec-3] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:14.013 INFO 26010 --- [nio-8080-exec-4] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:14.820 INFO 26010 --- [nio-8080-exec-5] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:15.703 INFO 26010 --- [ scheduling-1] siosio.cachedemo.SampleClearCache : clear cache 2019-03-23 07:28:15.715 INFO 26010 --- [nio-8080-exec-7] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:16.716 INFO 26010 --- [nio-8080-exec-7] siosio.cachedemo.SampleService : a --> A 2019-03-23 07:28:17.837 INFO 26010 --- [nio-8080-exec-8] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:20.011 INFO 26010 --- [nio-8080-exec-9] siosio.cachedemo.SampleController : value: a 2019-03-23 07:28:25.703 INFO 26010 --- [ scheduling-1] siosio.cachedemo.SampleClearCache : clear cache