I want to provide a method with the signature-
`public void addObjectToCacheWithExpiry(CaffeineCacheManager caffeineCacheManager, String cacheName, String key, Object value, long duration, TimeUnit timeUnit)`
So that I can put a value inside the specific cache with the duration passed as an arg.
Some explanation was offered here by Ben Caffeine Cache - Specify expiry for an entry
`. @Override
public void addObjectToCacheWithExpiry(CaffeineCacheManager caffeineCacheManager, String cacheName, String key, Object value, long duration, TimeUnit timeUnit) {
CaffeineCache caffeineCache = (CaffeineCache) caffeineCacheManager.getCache(cacheName);
Cache<Object, Object> nativeCache = caffeineCache.getNativeCache();
Policy.VarExpiration varExpiration = (Policy.VarExpiration) nativeCache.policy().expireVariably().get();
varExpiration.put(key, value, duration, timeUnit);`
}
I couldn't follow the whole thing. It mentions that we can use cache.policy() to get Policy.VarExpiration interface which provides access to the method I needed. To that end, I added the following code-
In principle this is what I wanted. However, when I get the nativeCache object it doesn't show up with a policy(policy = null). This prevents me from using it to put object since it just returns NPE. How should I tackle this? null policy for empty map
Adding the config for CaffeineCache-
` `@Bean
public CaffeineCacheManager caffeineCacheManager(Caffeine caffeine){
CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
caffeineCacheManager.setCaffeine(caffeine);
return caffeineCacheManager;
}
@Bean
public Caffeine CaffeineCacheConfig() {
return Caffeine.newBuilder()
.expireAfterWrite(5, TimeUnit.MINUTES)
.initialCapacity(1000)
.maximumSize(1200);
}`
`