reformatting from default and update test method names

This commit is contained in:
saikat 2024-03-06 13:09:58 +05:30
parent b182b42c07
commit b2a0a75389
4 changed files with 28 additions and 32 deletions

View File

@ -26,40 +26,40 @@ public class CacheConfig {
@Bean @Bean
@Primary @Primary
public CacheManager caffeineCacheManager() { public CacheManager caffeineCacheManager(CaffeineCache caffeineCache) {
SimpleCacheManager manager = new SimpleCacheManager(); SimpleCacheManager manager = new SimpleCacheManager();
manager.setCaches(Arrays.asList(caffeineCacheConfig())); manager.setCaches(Arrays.asList(caffeineCache));
return manager; return manager;
} }
@Bean @Bean
public CaffeineCache caffeineCacheConfig() { public CaffeineCache caffeineCacheConfig() {
return new CaffeineCache("customerCache", Caffeine.newBuilder() return new CaffeineCache("customerCache", Caffeine.newBuilder()
.expireAfterWrite(Duration.ofSeconds(3)) .expireAfterWrite(Duration.ofSeconds(3))
.initialCapacity(1) .initialCapacity(1)
.maximumSize(2000) .maximumSize(2000)
.build()); .build());
} }
@Bean @Bean
public CacheManager redisCacheManager(RedisConnectionFactory connectionFactory) { public CacheManager redisCacheManager(RedisConnectionFactory connectionFactory, RedisCacheConfiguration redisCacheConfiguration) {
return RedisCacheManager.RedisCacheManagerBuilder return RedisCacheManager.RedisCacheManagerBuilder
.fromConnectionFactory(connectionFactory) .fromConnectionFactory(connectionFactory)
.withCacheConfiguration("customerCache", cacheConfiguration()) .withCacheConfiguration("customerCache", redisCacheConfiguration)
.build(); .build();
} }
@Bean @Bean
public RedisCacheConfiguration cacheConfiguration() { public RedisCacheConfiguration cacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig() return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(5)) .entryTtl(Duration.ofMinutes(5))
.disableCachingNullValues() .disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
} }
@Bean @Bean
public CacheInterceptor cacheInterceptor() { public CacheInterceptor cacheInterceptor(CacheManager caffeineCacheManager) {
CacheInterceptor interceptor = new CustomerCacheInterceptor(caffeineCacheManager()); CacheInterceptor interceptor = new CustomerCacheInterceptor(caffeineCacheManager);
interceptor.setCacheOperationSources(cacheOperationSource()); interceptor.setCacheOperationSources(cacheOperationSource());
return interceptor; return interceptor;
} }

View File

@ -16,11 +16,11 @@ public class CustomerService {
} }
@Caching(cacheable = { @Caching(cacheable = {
@Cacheable(cacheNames = "customerCache", cacheManager = "caffeineCacheManager"), @Cacheable(cacheNames = "customerCache", cacheManager = "caffeineCacheManager"),
@Cacheable(cacheNames = "customerCache", cacheManager = "redisCacheManager") @Cacheable(cacheNames = "customerCache", cacheManager = "redisCacheManager")
}) })
public Customer getCustomer(String id) { public Customer getCustomer(String id) {
return customerRepository.findById(id) return customerRepository.findById(id)
.orElseThrow(RuntimeException::new); .orElseThrow(RuntimeException::new);
} }
} }

View File

@ -2,10 +2,8 @@ package com.baeldung.caching.twolevelcache;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication @SpringBootApplication
@EnableCaching
public class TwoLevelCacheApplication { public class TwoLevelCacheApplication {
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -44,23 +44,22 @@ class CustomerServiceCachingIntegrationTest {
private CacheManager caffeineCacheManager; private CacheManager caffeineCacheManager;
@Test @Test
void givenCustomerIsPresentInDB_whenGetCustomerById_thenCustomerReturnedFromDBAndCached() { void givenCustomerIsPresent_whenGetCustomerCalled_thenReturnCustomerAndCacheIt() {
String CUSTOMER_ID = "100"; String CUSTOMER_ID = "100";
Customer customer = new Customer(CUSTOMER_ID, "test", "test@mail.com"); Customer customer = new Customer(CUSTOMER_ID, "test", "test@mail.com");
given(customerRepository.findById(CUSTOMER_ID)) given(customerRepository.findById(CUSTOMER_ID)).willReturn(Optional.of(customer));
.willReturn(Optional.of(customer));
Customer customerCacheMiss = customerService.getCustomer(CUSTOMER_ID); Customer customerCacheMiss = customerService.getCustomer(CUSTOMER_ID);
assertThat(customerCacheMiss).isEqualTo(customer); assertThat(customerCacheMiss).isEqualTo(customer);
verify(customerRepository, times(1)).findById(CUSTOMER_ID); verify(customerRepository, times(1)).findById(CUSTOMER_ID);
assertThat(customerFromRedisCache(CUSTOMER_ID)).isEqualTo(customer);
assertThat(customerFromCaffeineCache(CUSTOMER_ID)).isEqualTo(customer); assertThat(customerFromCaffeineCache(CUSTOMER_ID)).isEqualTo(customer);
assertThat(customerFromRedisCache(CUSTOMER_ID)).isEqualTo(customer);
} }
@Test @Test
void givenCustomerIsPresentInDB_whenGetCustomerByIdIsCalledTwice_thenCustomerReturnedFromDBAndCached() { void givenCustomerIsPresent_whenGetCustomerCalledTwice_thenReturnCustomerAndCacheIt() {
String CUSTOMER_ID = "101"; String CUSTOMER_ID = "101";
Customer customer = new Customer(CUSTOMER_ID, "test", "test@mail.com"); Customer customer = new Customer(CUSTOMER_ID, "test", "test@mail.com");
given(customerRepository.findById(CUSTOMER_ID)).willReturn(Optional.of(customer)); given(customerRepository.findById(CUSTOMER_ID)).willReturn(Optional.of(customer));
@ -71,16 +70,15 @@ class CustomerServiceCachingIntegrationTest {
assertThat(customerCacheMiss).isEqualTo(customer); assertThat(customerCacheMiss).isEqualTo(customer);
assertThat(customerCacheHit).isEqualTo(customer); assertThat(customerCacheHit).isEqualTo(customer);
verify(customerRepository, times(1)).findById(CUSTOMER_ID); verify(customerRepository, times(1)).findById(CUSTOMER_ID);
assertThat(customerFromRedisCache(CUSTOMER_ID)).isEqualTo(customer);
assertThat(customerFromCaffeineCache(CUSTOMER_ID)).isEqualTo(customer); assertThat(customerFromCaffeineCache(CUSTOMER_ID)).isEqualTo(customer);
assertThat(customerFromRedisCache(CUSTOMER_ID)).isEqualTo(customer);
} }
@Test @Test
void givenCustomerIsPresentInDB_whenGetCustomerByIdIsCalledTwice_AndFirstCacheExpires_thenCustomerReturnedFromDBAndCached() throws InterruptedException { void givenCustomerIsPresent_whenGetCustomerCalledTwiceAndFirstCacheExpired_thenReturnCustomerAndCacheIt() throws InterruptedException {
String CUSTOMER_ID = "102"; String CUSTOMER_ID = "102";
Customer customer = new Customer(CUSTOMER_ID, "test", "test@mail.com"); Customer customer = new Customer(CUSTOMER_ID, "test", "test@mail.com");
given(customerRepository.findById(CUSTOMER_ID)) given(customerRepository.findById(CUSTOMER_ID)).willReturn(Optional.of(customer));
.willReturn(Optional.of(customer));
Customer customerCacheMiss = customerService.getCustomer(CUSTOMER_ID); Customer customerCacheMiss = customerService.getCustomer(CUSTOMER_ID);
TimeUnit.SECONDS.sleep(3); TimeUnit.SECONDS.sleep(3);
@ -90,18 +88,18 @@ class CustomerServiceCachingIntegrationTest {
verify(customerRepository, times(1)).findById(CUSTOMER_ID); verify(customerRepository, times(1)).findById(CUSTOMER_ID);
assertThat(customerCacheMiss).isEqualTo(customer); assertThat(customerCacheMiss).isEqualTo(customer);
assertThat(customerCacheHit).isEqualTo(customer); assertThat(customerCacheHit).isEqualTo(customer);
assertThat(customerFromRedisCache(CUSTOMER_ID)).isEqualTo(customer);
assertThat(customerFromCaffeineCache(CUSTOMER_ID)).isEqualTo(customer); assertThat(customerFromCaffeineCache(CUSTOMER_ID)).isEqualTo(customer);
assertThat(customerFromRedisCache(CUSTOMER_ID)).isEqualTo(customer);
} }
private Object customerFromRedisCache(String key) { private Object customerFromRedisCache(String key) {
return redisCacheManager.getCache("customerCache").get(key) != null ? return redisCacheManager.getCache("customerCache").get(key) != null ?
redisCacheManager.getCache("customerCache").get(key).get() : null; redisCacheManager.getCache("customerCache").get(key).get() : null;
} }
private Object customerFromCaffeineCache(String key) { private Object customerFromCaffeineCache(String key) {
return caffeineCacheManager.getCache("customerCache").get(key) != null ? return caffeineCacheManager.getCache("customerCache").get(key) != null ?
caffeineCacheManager.getCache("customerCache").get(key).get() : null; caffeineCacheManager.getCache("customerCache").get(key).get() : null;
} }
@TestConfiguration @TestConfiguration