public class CaffeineCacheManager extends Object implements CacheManager
CacheManager
implementation that lazily builds CaffeineCache
instances for each getCache(java.lang.String)
request. Also supports a 'static' mode
where the set of cache names is pre-defined through setCacheNames(java.util.Collection<java.lang.String>)
,
with no dynamic creation of further cache regions at runtime.
The configuration of the underlying cache can be fine-tuned through a
Caffeine
builder or CaffeineSpec
, passed into this
CacheManager through setCaffeine(com.github.benmanes.caffeine.cache.Caffeine<java.lang.Object, java.lang.Object>)
/setCaffeineSpec(com.github.benmanes.caffeine.cache.CaffeineSpec)
.
A CaffeineSpec
-compliant expression value can also be applied
via the "cacheSpecification"
bean property.
Requires Caffeine 2.1 or higher.
CaffeineCache
Constructor and Description |
---|
CaffeineCacheManager()
Construct a dynamic CaffeineCacheManager,
lazily creating cache instances as they are being requested.
|
CaffeineCacheManager(String... cacheNames)
Construct a static CaffeineCacheManager,
managing caches for the specified cache names only.
|
Modifier and Type | Method and Description |
---|---|
protected Cache |
adaptCaffeineCache(String name,
com.github.benmanes.caffeine.cache.Cache<Object,Object> cache)
Adapt the given new native Caffeine Cache instance to Spring's
Cache
abstraction for the specified cache name. |
protected Cache |
createCaffeineCache(String name)
Build a common
CaffeineCache instance for the specified cache name,
using the common Caffeine configuration specified on this cache manager. |
protected com.github.benmanes.caffeine.cache.Cache<Object,Object> |
createNativeCaffeineCache(String name)
Build a common Caffeine Cache instance for the specified cache name,
using the common Caffeine configuration specified on this cache manager.
|
Cache |
getCache(String name)
Get the cache associated with the given name.
|
Collection<String> |
getCacheNames()
Get a collection of the cache names known by this manager.
|
boolean |
isAllowNullValues()
Return whether this cache manager accepts and converts
null values
for all of its caches. |
void |
registerCustomCache(String name,
com.github.benmanes.caffeine.cache.Cache<Object,Object> cache)
Register the given native Caffeine Cache instance with this cache manager,
adapting it to Spring's cache API for exposure through
getCache(java.lang.String) . |
void |
setAllowNullValues(boolean allowNullValues)
Specify whether to accept and convert
null values for all caches
in this cache manager. |
void |
setCacheLoader(com.github.benmanes.caffeine.cache.CacheLoader<Object,Object> cacheLoader)
Set the Caffeine CacheLoader to use for building each individual
CaffeineCache instance, turning it into a LoadingCache. |
void |
setCacheNames(Collection<String> cacheNames)
Specify the set of cache names for this CacheManager's 'static' mode.
|
void |
setCacheSpecification(String cacheSpecification)
Set the Caffeine cache specification String to use for building each
individual
CaffeineCache instance. |
void |
setCaffeine(com.github.benmanes.caffeine.cache.Caffeine<Object,Object> caffeine)
Set the Caffeine to use for building each individual
CaffeineCache instance. |
void |
setCaffeineSpec(com.github.benmanes.caffeine.cache.CaffeineSpec caffeineSpec)
Set the
CaffeineSpec to use for building each individual
CaffeineCache instance. |
public CaffeineCacheManager()
public CaffeineCacheManager(String... cacheNames)
public void setCacheNames(@Nullable Collection<String> cacheNames)
The number of caches and their names will be fixed after a call to this method, with no creation of further cache regions at runtime.
Calling this with a null
collection argument resets the
mode to 'dynamic', allowing for further creation of caches again.
public void setCaffeine(com.github.benmanes.caffeine.cache.Caffeine<Object,Object> caffeine)
CaffeineCache
instance.createNativeCaffeineCache(java.lang.String)
,
Caffeine.build()
public void setCaffeineSpec(com.github.benmanes.caffeine.cache.CaffeineSpec caffeineSpec)
CaffeineSpec
to use for building each individual
CaffeineCache
instance.createNativeCaffeineCache(java.lang.String)
,
Caffeine.from(CaffeineSpec)
public void setCacheSpecification(String cacheSpecification)
CaffeineCache
instance. The given value needs to
comply with Caffeine's CaffeineSpec
(see its javadoc).createNativeCaffeineCache(java.lang.String)
,
Caffeine.from(String)
public void setCacheLoader(com.github.benmanes.caffeine.cache.CacheLoader<Object,Object> cacheLoader)
CaffeineCache
instance, turning it into a LoadingCache.createNativeCaffeineCache(java.lang.String)
,
Caffeine.build(CacheLoader)
,
LoadingCache
public void setAllowNullValues(boolean allowNullValues)
null
values for all caches
in this cache manager.
Default is "true", despite Caffeine itself not supporting null
values.
An internal holder object will be used to store user-level null
s.
public boolean isAllowNullValues()
null
values
for all of its caches.public Collection<String> getCacheNames()
CacheManager
getCacheNames
in interface CacheManager
@Nullable public Cache getCache(String name)
CacheManager
Note that the cache may be lazily created at runtime if the native provider supports it.
getCache
in interface CacheManager
name
- the cache identifier (must not be null
)null
if such a cache
does not exist or could be not createdpublic void registerCustomCache(String name, com.github.benmanes.caffeine.cache.Cache<Object,Object> cache)
getCache(java.lang.String)
.
Any number of such custom caches may be registered side by side.
This allows for custom settings per cache (as opposed to all caches
sharing the common settings in the cache manager's configuration) and
is typically used with the Caffeine builder API:
registerCustomCache("myCache", Caffeine.newBuilder().maximumSize(10).build())
Note that any other caches, whether statically specified through
setCacheNames(java.util.Collection<java.lang.String>)
or dynamically built on demand, still operate
with the common settings in the cache manager's configuration.
name
- the name of the cachecache
- the custom Caffeine Cache instance to registeradaptCaffeineCache(java.lang.String, com.github.benmanes.caffeine.cache.Cache<java.lang.Object, java.lang.Object>)
protected Cache adaptCaffeineCache(String name, com.github.benmanes.caffeine.cache.Cache<Object,Object> cache)
Cache
abstraction for the specified cache name.name
- the name of the cachecache
- the native Caffeine Cache instanceCaffeineCache
,
isAllowNullValues()
protected Cache createCaffeineCache(String name)
CaffeineCache
instance for the specified cache name,
using the common Caffeine configuration specified on this cache manager.
Delegates to adaptCaffeineCache(java.lang.String, com.github.benmanes.caffeine.cache.Cache<java.lang.Object, java.lang.Object>)
as the adaptation method to
Spring's cache abstraction (allowing for centralized decoration etc),
passing in a freshly built native Caffeine Cache instance.
name
- the name of the cacheadaptCaffeineCache(java.lang.String, com.github.benmanes.caffeine.cache.Cache<java.lang.Object, java.lang.Object>)
,
createNativeCaffeineCache(java.lang.String)
protected com.github.benmanes.caffeine.cache.Cache<Object,Object> createNativeCaffeineCache(String name)
name
- the name of the cachecreateCaffeineCache(java.lang.String)