diff --git a/pom.xml b/pom.xml index 8629b0399..31b40bfe5 100644 --- a/pom.xml +++ b/pom.xml @@ -79,6 +79,16 @@ spring-boot-starter-test test + + + + javax.cache + cache-api + + + org.ehcache + ehcache + diff --git a/src/main/java/org/springframework/samples/petclinic/config/CacheConfig.java b/src/main/java/org/springframework/samples/petclinic/config/CacheConfig.java new file mode 100644 index 000000000..512254b2d --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/config/CacheConfig.java @@ -0,0 +1,42 @@ +package org.springframework.samples.petclinic.config; + +import org.ehcache.config.CacheConfiguration; +import org.ehcache.config.builders.CacheConfigurationBuilder; +import org.ehcache.config.builders.ResourcePoolsBuilder; +import org.ehcache.config.units.EntryUnit; +import org.ehcache.expiry.Duration; +import org.ehcache.expiry.Expirations; +import org.ehcache.jsr107.Eh107Configuration; +import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +import javax.cache.CacheManager; +import java.util.concurrent.TimeUnit; + +/** + * Cache could be disable in unit test. + */ +@Configuration +@EnableCaching +public class CacheConfig { + + @Bean + public JCacheManagerCustomizer cacheManagerCustomizer() { + return new JCacheManagerCustomizer() { + @Override + public void customize(CacheManager cacheManager) { + CacheConfiguration config = CacheConfigurationBuilder + .newCacheConfigurationBuilder(Object.class, Object.class, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(100, EntryUnit.ENTRIES)) + .withExpiry(Expirations.timeToLiveExpiration(Duration.of(60, TimeUnit.SECONDS))) + .build(); + cacheManager.createCache("vets", Eh107Configuration.fromEhcacheCacheConfiguration(config)); + } + }; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/service/ClinicServiceImpl.java b/src/main/java/org/springframework/samples/petclinic/service/ClinicServiceImpl.java index 59b764092..4c7218c21 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/ClinicServiceImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/service/ClinicServiceImpl.java @@ -15,16 +15,9 @@ */ package org.springframework.samples.petclinic.service; -import java.util.Collection; - import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.annotation.Cacheable; import org.springframework.dao.DataAccessException; -import org.springframework.samples.petclinic.model.Owner; -import org.springframework.samples.petclinic.model.Pet; -import org.springframework.samples.petclinic.model.PetType; -import org.springframework.samples.petclinic.model.Vet; -import org.springframework.samples.petclinic.model.Visit; +import org.springframework.samples.petclinic.model.*; import org.springframework.samples.petclinic.repository.OwnerRepository; import org.springframework.samples.petclinic.repository.PetRepository; import org.springframework.samples.petclinic.repository.VetRepository; @@ -32,6 +25,9 @@ import org.springframework.samples.petclinic.repository.VisitRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.cache.annotation.CacheResult; +import java.util.Collection; + /** * Mostly used as a facade for all Petclinic controllers * Also a placeholder for @Transactional and @Cacheable annotations @@ -99,7 +95,7 @@ public class ClinicServiceImpl implements ClinicService { @Override @Transactional(readOnly = true) - @Cacheable(value = "vets") + @CacheResult(cacheName = "vets") public Collection findVets() throws DataAccessException { return vetRepository.findAll(); }