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 a4dc5dd249..19e618e512 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 0000000000..b85139606f --- /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 049221394e..3a99330f56 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 15cc902970..b9d1c18778 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 024d287871..0000000000 --- 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(); - } -}