Ags*_*Ags 8 spring caching spring-cache caffeine
我正在使用带有 spring 注释的咖啡因缓存提供程序,当条目\xe2\x80\x99s 放入缓存或驱逐或缓存上发生的任何活动时,我无法看到来自 caffeinecachemanager 的日志。我是否必须明确提及属性启用或禁用咖啡因日志?
\n\n任何人都可以帮助解决以下问题吗?\n当 @cachable 填充缓存时如何记录消息?\n当缓存条目从缓存中逐出时如何记录?\n有什么方法可以检查以缓存名称存储的所有缓存条目吗?\ n使用spring注解和CaffeineCacheManager时是否需要AOP配置。?如果是这样,请帮助示例。
\n理想的情况是使用方面,但我不想深入研究它,因为它只是为了调试以了解实际的底层行为。
所以我使用 kotlin 做了下面的事情,但你可以根据你的需要进行调整。
首先,创建一个委托类:
class DelegatingCache<K, V>(
val name: String,
private val delegate: Cache<K, V>
) : Cache<K, V> {
private val logger = LoggerFactory.getLogger(javaClass)
override fun getIfPresent(key: K): V? = delegate.getIfPresent(key)
.also { logger.warn("$name getIfPresent(key=$key) = $it") }
override fun get(key: K, mappingFunction: Function<in K, out @PolyNull V>?): @PolyNull V =
delegate.get(key, mappingFunction)
.also { logger.warn("$name get(key=$key) = $it") }
override fun getAllPresent(keys: Iterable<K>): Map<K, V> = delegate.getAllPresent(keys)
.also { logger.warn("$name getAllPresent") }
override fun getAll(
keys: MutableIterable<K>?,
mappingFunction: Function<in MutableSet<out K>, out MutableMap<out K, out V>>?
): MutableMap<K, V>? = delegate.getAll(keys, mappingFunction)
.also { logger.warn("$name getAll") }
override fun put(key: K, value: V) = delegate.put(key, value)
.also { logger.warn("$name put(key=$key, value=$value)") }
override fun putAll(map: Map<out K, V>) = delegate.putAll(map)
.also { logger.warn("$name putAll") }
override fun invalidate(key: K) = delegate.invalidate(key)
.also { logger.warn("$name invalidate(key=$key)") }
override fun invalidateAll(keys: Iterable<K>) = delegate.invalidateAll(keys)
.also { logger.warn("$name invalidateAll(keys: Iterable<K>)") }
override fun invalidateAll() = delegate.invalidateAll()
.also { logger.warn("$name invalidateAll") }
override fun estimatedSize(): Long = delegate.estimatedSize()
.also { logger.warn("$name estimatedSize = $it") }
override fun stats(): CacheStats = delegate.stats()
.also { logger.warn("$name stats = $it") }
override fun asMap(): ConcurrentMap<K, V> = delegate.asMap()
.also { logger.warn("$name asMap") }
override fun cleanUp() = delegate.cleanUp()
.also { logger.warn("$name cleanUp") }
override fun policy(): Policy<K, V> = delegate.policy()
.also { logger.warn("$name policy = $it") }
}
Run Code Online (Sandbox Code Playgroud)
然后,当您在类上构建 Cache 实例时@Configuration,只需将缓存包装在该委托器类中,然后再返回它。
private fun <K, V> buildCache(
cacheName: String,
): Cache<K, V> {
return Caffeine.newBuilder()
// ...
.build<K, V>()
.let { DelegatingCache(cacheName, it) }
}
Run Code Online (Sandbox Code Playgroud)
干杯
| 归档时间: |
|
| 查看次数: |
2172 次 |
| 最近记录: |