gpt4 book ai didi

spring-boot - 如何通过Jackson通过json轻松地在Redis中缓存Kotlin对象?

转载 作者:行者123 更新时间:2023-12-02 13:08:56 28 4
gpt4 key购买 nike

我有一个用Kotlin编写的Spring boot应用程序,我想在Redis中启用缓存。我想将对象存储为序列化JSON,理想情况下,不想注册可能潜在缓存的每种类型。我有一些大多数都能用的配置,但需要注意的是。

@Bean
fun redisCacheConfiguration(): RedisCacheConfiguration {
val objectMapper =
ObjectMapper()
.registerModule(KotlinModule())
.registerModule(JavaTimeModule())
.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY)

val serializer = GenericJackson2JsonRedisSerializer(objectMapper)

return RedisCacheConfiguration
.defaultCacheConfig()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer))
}

我在理解 DefaultTyping的不同值时遇到了一些麻烦,但 NON_FINAL似乎是最广泛的。但是,由于默认情况下Kotlin中的对象是最终对象,因此这仅适用于标记为“打开”的对象。理想情况下,我想避免不得不“打开”对象,以便可以对其进行缓存。

我还有其他方法可以使这项工作吗?

最佳答案

我有同样的问题。您应该使用“开放”类。但这对数据类没有帮助,因为您不能使它们“打开”。
有一个名为“all-open”的插件,您可以在其中定义注释。如果使用这些批注,则类甚至是数据类都将变为“开放”。

spring-kotlin插件在幕后使用“全开”插件,因此诸如@ Service,@ Component等的spring注释使类对AOP开放,因为代理要求您从类继承。

如果您使用spring-kotlin插件,那么有一个很好的注释可以解决您的问题,它在Spring Cache中使用,其名称为@Cacheable。
如果您在类上使用@Cacheable,则当包含以下代码时,它们将变为打开并将其类型信息保存到json(例如:{@class:“com.example.MyClass”,...}):

    val objectMapper =
ObjectMapper()
.registerModule(KotlinModule())
.registerModule(JavaTimeModule())
.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY)

val serializer = GenericJackson2JsonRedisSerializer(objectMapper)

更多详细信息: https://kotlinlang.org/docs/reference/compiler-plugins.html

不久:您无需执行任何操作,只需要向所需的类中添加@Cacheable批注即可,从某种意义上说,它也适合IMO。

关于spring-boot - 如何通过Jackson通过json轻松地在Redis中缓存Kotlin对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52265326/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com