11package com.kioschool.kioschoolapi.global.configuration
22
3+ import com.fasterxml.jackson.databind.ObjectMapper
4+ import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator
5+ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
6+ import com.fasterxml.jackson.module.kotlin.KotlinModule
37import org.springframework.beans.factory.annotation.Value
48import org.springframework.context.annotation.Bean
59import org.springframework.context.annotation.Configuration
610import org.springframework.data.redis.connection.RedisConnectionFactory
711import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
812import org.springframework.data.redis.core.RedisTemplate
913import org.springframework.data.redis.core.ValueOperations
14+ import org.springframework.data.redis.listener.ChannelTopic
15+ import org.springframework.data.redis.listener.RedisMessageListenerContainer
16+ import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer
17+ import org.springframework.data.redis.serializer.StringRedisSerializer
18+ import com.fasterxml.jackson.datatype.hibernate5.jakarta.Hibernate5JakartaModule
1019
1120@Configuration
1221class RedisConfiguration (
@@ -34,8 +43,47 @@ class RedisConfiguration(
3443 return redisTemplate
3544 }
3645
46+ @Bean
47+ fun redisPubSubTemplate (connectionFactory : RedisConnectionFactory ): RedisTemplate <String , Any > {
48+ val template = RedisTemplate <String , Any >()
49+ template.connectionFactory = connectionFactory
50+ template.keySerializer = StringRedisSerializer ()
51+ template.valueSerializer = GenericJackson2JsonRedisSerializer (objectMapper())
52+ return template
53+ }
54+
55+ @Bean
56+ fun redisMessageListenerContainer (
57+ connectionFactory : RedisConnectionFactory
58+ ): RedisMessageListenerContainer {
59+ val container = RedisMessageListenerContainer ()
60+ container.setConnectionFactory(connectionFactory)
61+ return container
62+ }
63+
64+ @Bean
65+ fun internalTopic (): ChannelTopic {
66+ return ChannelTopic (" websocket-topic" )
67+ }
68+
3769 @Bean
3870 fun getValueOperations (): ValueOperations <String , Int > {
3971 return redisTemplate().opsForValue()
4072 }
73+
74+
75+
76+ private fun objectMapper (): ObjectMapper {
77+ return ObjectMapper ().apply {
78+ registerModule(JavaTimeModule ())
79+ registerModule(Hibernate5JakartaModule ())
80+ registerModule(KotlinModule .Builder ().build())
81+ activateDefaultTyping(
82+ BasicPolymorphicTypeValidator .builder()
83+ .allowIfBaseType(Any ::class .java)
84+ .build(),
85+ ObjectMapper .DefaultTyping .EVERYTHING
86+ )
87+ }
88+ }
4189}
0 commit comments