Once again I have created a template project to get you stared here: https://github.com/rizvn/SpringCache
The template project uses EHCache as the cache implementation.
Firstly we need in configure caching through the use of @EnableCaching then configure a cache manager for the context. The spring configuration looks like below. The full code is here:
@Configuration @EnableCaching //<---- This enables caching for the spring context @ComponentScan({"com.rizvn.*"}) public class Config { //This is the cache manager that will be used for the context @Bean public CacheManager cacheManager() { EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean(); //ehcache.xml is under src/main/resources/ehcache.xml ehCacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml")); ehCacheManagerFactoryBean.setShared(true); return new EhCacheCacheManager(ehCacheManagerFactoryBean.getObject()); } }
Once we have the configuration up and running all we have to do is annotate methods for which we want to cache response, using @Cacheble, also to store shared cache config information for classes, use @CacheConfig. Below is an example of a cached response. The full code is here
@Component @CacheConfig(cacheNames = "calculator_cache") //<-- default cache where results will be cached public class SlowCalculator { @Cacheable //<-- indicates that the result will be cached so, second call with same arguments will not wait 5000ms public Double calculateHypotenuse(int a, int b) { System.out.println("Calculating hypotenuse..."); sleep(5000L); return Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)); } private void sleep(long seconds) { try { Thread.sleep(seconds); } catch (Exception e) { throw new IllegalStateException(e); } } }
No comments:
Post a Comment