Annotation Interface CacheResult
CacheResult
is invoked, Quarkus will compute a cache key and use it to check in the
cache whether the method has been already invoked.
The cache key is computed using the following logic:
- If a
CacheKeyGenerator
is specified with this annotation, then it is used to generate the cache key. The@CacheKey
annotations that might be present on some of the method arguments are ignored. - Otherwise, if the method has no arguments, then the cache key is an instance of
DefaultCacheKey
built from the cache name. - Otherwise, if the method has exactly one argument, then that argument is the cache key.
- Otherwise, if the method has multiple arguments but only one annotated with
@CacheKey
, then that annotated argument is the cache key. - Otherwise, if the method has multiple arguments annotated with
@CacheKey
, then the cache key is an instance ofCompositeCacheKey
built from these annotated arguments. - Otherwise, the cache key is an instance of
CompositeCacheKey
built from all the method arguments.
If a value is found in the cache, it is returned and the annotated method is never actually executed. If no value is found, the annotated method is invoked and the returned value is stored in the cache using the computed key.
A method annotated with CacheResult
is protected by a lock on cache miss mechanism. If several concurrent
invocations try to retrieve a cache value from the same missing key, the method will only be invoked once. The first
concurrent invocation will trigger the method invocation while the subsequent concurrent invocations will wait for the end
of the method invocation to get the cached result. The lockTimeout
parameter can be used to interrupt the lock after
a given delay. The lock timeout is disabled by default, meaning the lock is never interrupted. See the parameter Javadoc for
more details.
This annotation cannot be used on a method returning void
. It can be combined with multiple other caching
annotations on a single method. Caching operations will always be executed in the same order: CacheInvalidateAll
first, then CacheInvalidate
and finally CacheResult
.
The underlying caching provider can be chosen and configured in the Quarkus application.properties
file.
-
Required Element Summary
-
Optional Element Summary
Modifier and TypeOptional ElementDescriptionClass<? extends CacheKeyGenerator>
TheCacheKeyGenerator
implementation to use to generate a cache key.long
Delay in milliseconds before the lock on cache miss is interrupted.
-
Element Details
-
cacheName
String cacheNameThe name of the cache.
-
-
-
lockTimeout
long lockTimeoutDelay in milliseconds before the lock on cache miss is interrupted. If such interruption happens, the cached method will be invoked and its result will be returned without being cached. A value of0
(which is the default one) means that the lock timeout is disabled.- Default:
- 0L
-
keyGenerator
Class<? extends CacheKeyGenerator> keyGeneratorTheCacheKeyGenerator
implementation to use to generate a cache key.- Default:
- io.quarkus.cache.runtime.UndefinedCacheKeyGenerator.class
-