From 3cfb91a30d49d9d837d9db76d7ef1a0c2298a3d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=9B=90=EA=B2=BD?= Date: Thu, 11 Jul 2024 15:03:06 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20RedisConfig=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../koin/global/config/RedisConfig.java | 20 +++--- .../config/RedisKeyExpiredListener.java | 13 ++++ .../in/koreatech/koin/AcceptanceTest.java | 3 +- .../koreatech/koin/KoinApplicationTest.java | 3 +- .../koin/config/TestRedisConfiguration.java | 70 ------------------- 5 files changed, 23 insertions(+), 86 deletions(-) create mode 100644 src/main/java/in/koreatech/koin/global/config/RedisKeyExpiredListener.java delete mode 100644 src/test/java/in/koreatech/koin/config/TestRedisConfiguration.java diff --git a/src/main/java/in/koreatech/koin/global/config/RedisConfig.java b/src/main/java/in/koreatech/koin/global/config/RedisConfig.java index a4dc5dd24..19e618e51 100644 --- a/src/main/java/in/koreatech/koin/global/config/RedisConfig.java +++ b/src/main/java/in/koreatech/koin/global/config/RedisConfig.java @@ -7,12 +7,10 @@ import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisKeyValueAdapter; -import org.springframework.data.redis.core.RedisKeyValueTemplate; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.mapping.RedisMappingContext; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.repository.configuration.EnableRedisRepositories; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.http.client.BufferingClientHttpRequestFactory; @@ -25,17 +23,8 @@ @Configuration @EnableRedisRepositories(enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.ON_STARTUP) -@Profile("!test") public class RedisConfig { - @Bean - public RedisKeyValueTemplate redisKeyValueTemplate(RedisConnectionFactory connectionFactory) { - RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setConnectionFactory(connectionFactory); - redisTemplate.afterPropertiesSet(); - return new RedisKeyValueTemplate(new RedisKeyValueAdapter(redisTemplate), new RedisMappingContext()); - } - @Bean public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate<>(); @@ -55,4 +44,11 @@ public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { .setReadTimeout(Duration.ofMillis(5000)) .additionalMessageConverters(new StringHttpMessageConverter(UTF_8)).build(); } + + @Bean + public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { + RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer(); + redisMessageListenerContainer.setConnectionFactory(connectionFactory); + return redisMessageListenerContainer; + } } diff --git a/src/main/java/in/koreatech/koin/global/config/RedisKeyExpiredListener.java b/src/main/java/in/koreatech/koin/global/config/RedisKeyExpiredListener.java new file mode 100644 index 000000000..b85139606 --- /dev/null +++ b/src/main/java/in/koreatech/koin/global/config/RedisKeyExpiredListener.java @@ -0,0 +1,13 @@ +package in.koreatech.koin.global.config; + +import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.stereotype.Component; + +@Component +public class RedisKeyExpiredListener extends KeyExpirationEventMessageListener { + + public RedisKeyExpiredListener(RedisMessageListenerContainer listenerContainer) { + super(listenerContainer); + } +} diff --git a/src/test/java/in/koreatech/koin/AcceptanceTest.java b/src/test/java/in/koreatech/koin/AcceptanceTest.java index 049221394..3a99330f5 100644 --- a/src/test/java/in/koreatech/koin/AcceptanceTest.java +++ b/src/test/java/in/koreatech/koin/AcceptanceTest.java @@ -4,7 +4,6 @@ import java.time.Clock; -import in.koreatech.koin.config.TestRedisConfiguration; import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -34,7 +33,7 @@ import jakarta.persistence.EntityManager; @SpringBootTest(webEnvironment = RANDOM_PORT) -@Import({DBInitializer.class, TestJpaConfiguration.class, TestTimeConfig.class, TestRedisConfiguration.class}) +@Import({DBInitializer.class, TestJpaConfiguration.class, TestTimeConfig.class}) @ActiveProfiles("test") public abstract class AcceptanceTest { diff --git a/src/test/java/in/koreatech/koin/KoinApplicationTest.java b/src/test/java/in/koreatech/koin/KoinApplicationTest.java index 15cc90297..b9d1c1877 100644 --- a/src/test/java/in/koreatech/koin/KoinApplicationTest.java +++ b/src/test/java/in/koreatech/koin/KoinApplicationTest.java @@ -1,6 +1,5 @@ package in.koreatech.koin; -import in.koreatech.koin.config.TestRedisConfiguration; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Import; @@ -11,7 +10,7 @@ @SpringBootTest @ActiveProfiles("test") -@Import({TestJpaConfiguration.class, TestTimeConfig.class, TestRedisConfiguration.class}) +@Import({TestJpaConfiguration.class, TestTimeConfig.class}) class KoinApplicationTest { @Test diff --git a/src/test/java/in/koreatech/koin/config/TestRedisConfiguration.java b/src/test/java/in/koreatech/koin/config/TestRedisConfiguration.java deleted file mode 100644 index 024d28787..000000000 --- a/src/test/java/in/koreatech/koin/config/TestRedisConfiguration.java +++ /dev/null @@ -1,70 +0,0 @@ -package in.koreatech.koin.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.RedisStandaloneConfiguration; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.data.redis.core.RedisKeyValueAdapter; -import org.springframework.data.redis.core.RedisKeyValueTemplate; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.mapping.RedisMappingContext; -import org.springframework.data.redis.repository.configuration.EnableRedisRepositories; -import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; -import org.springframework.http.client.BufferingClientHttpRequestFactory; -import org.springframework.http.client.SimpleClientHttpRequestFactory; -import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.web.client.RestTemplate; - -import java.time.Duration; - -import static java.nio.charset.StandardCharsets.UTF_8; - -@TestConfiguration -@EnableRedisRepositories(enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.ON_STARTUP) -public class TestRedisConfiguration { - - @Value("${spring.data.redis.host}") - private String redisHost; - - @Value("${spring.data.redis.port}") - private int redisPort; - - @Bean - public RedisConnectionFactory redisConnectionFactory() { - RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(redisHost, redisPort); - return new LettuceConnectionFactory(config); - } - - @Bean - public RedisKeyValueTemplate redisKeyValueTemplate(RedisConnectionFactory connectionFactory) { - RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setConnectionFactory(connectionFactory); - redisTemplate.afterPropertiesSet(); - return new RedisKeyValueTemplate(new RedisKeyValueAdapter(redisTemplate), new RedisMappingContext()); - } - - @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { - RedisTemplate template = new RedisTemplate<>(); - ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new JavaTimeModule()); - GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer(mapper); - template.setValueSerializer(serializer); - template.setConnectionFactory(connectionFactory); - return template; - } - - @Bean - public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { - return restTemplateBuilder. - requestFactory(() -> new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())). - setConnectTimeout(Duration.ofMillis(5000)) - .setReadTimeout(Duration.ofMillis(5000)) - .additionalMessageConverters(new StringHttpMessageConverter(UTF_8)).build(); - } -}