I'm working on a
Spring Boot
Hazelcast
Guava
@Cacheable
Which implementation is needed based on the cache name?
Not based on the cache name but yes based on CacheManager its possible, declare one of them as Primary CacheManager
, as follows:
@Configuration
@EnableCaching
@PropertySource(value = { "classpath:/cache.properties" })
public class CacheConfig {
@Bean
@Primary
public CacheManager hazelcastCacheManager() {
ClientConfig config = new ClientConfig();
HazelcastInstance client = HazelcastClient.newHazelcastClient(config);
return new HazelcastCacheManager(client);
}
@Bean
public CacheManager guavaCacheManager() {
GuavaCacheManager cacheManager = new GuavaCacheManager("mycache");
CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.MINUTES);
cacheManager.setCacheBuilder(cacheBuilder);
return cacheManager;
}
}
And specify it at class level as:
@Service
@CacheConfig(cacheManager="hazelcastCacheManager")
public class EmployeeServiceImpl implements IEmployeeService {
}
Or at method level as:
@Service
public class EmployeeServiceImpl implements IEmployeeService {
@Override
@Cacheable(value = "EMPLOYEE_", key = "#id", cacheManager= "guavaCacheManager")
public Employee getEmployee(int id) {
return new Employee(id, "A");
}
}
If you have to stick on Cache name only then you can multiple CacheManager.