Spring-Data REDIS 的 Spring Bean 覆盖

Posted

技术标签:

【中文标题】Spring-Data REDIS 的 Spring Bean 覆盖【英文标题】:Spring Bean Override for Spring-Data REDIS 【发布时间】:2020-08-07 03:03:37 【问题描述】:

我正在尝试覆盖 RedisCustomConversions [初始帖子](RedisCustomConversions using Redis Repository 注意到一些不一致的行为。

当我从 IDE 运行 spring boot 应用程序时,我得到了上面帖子中提到的错误,但是如果使用 java -jar myapp.jar 执行应用程序,它可以正常工作。这听起来不错,但这让我怀疑这种行为是否一致?即我的重载 bean 是否会一直连接?还是随机的?

我还从 /actuator/beans 端点注意到,当在 IDE 中执行时,我得到了这个

redisCustomConversions: 
  aliases: [ ],
  scope: "singleton",
  type: "org.springframework.data.redis.core.convert.RedisCustomConversions",
  dependencies: []

但是从命令行运行我看到了这个。

redisCustomConversions: 
  aliases: [ ],
  scope: "singleton",
  type: "org.springframework.data.redis.core.convert.RedisCustomConversions",
  resource: "class path resource [com/my/project/cache/config/RedisConfig.class]",
  dependencies: [
   "MyWriterConverter",
   "MyReaderConverter"
]

所以问题是,我们可以依赖这种行为吗?或者它是随机的,对于某些部署,将加载默认的 RedisCustomConversions,而对于其他我的自定义 RedisCustomConversions 将被加载(这会使应用程序崩溃,因为 REDIS 中的数据格式会不同)?

【问题讨论】:

【参考方案1】:

我和你有同样的问题,在我的头撞到墙上的时间比我想承认的要长之后,我在 spring-data gitter 中询问了。他们是这样回答的:

使用Spring Boot时,需要在同一个配置类上声明@EnableRedisRepositories@BeanRedisCustomConversions的定义。这是目前@EnableRedisRepositories 构建方式的限制。

【讨论】:

感谢您的回复 Taylor,我已退出该项目,因此没有代码可以试用。但是如果我将来必须使用它,这将有所帮助。

以上是关于Spring-Data REDIS 的 Spring Bean 覆盖的主要内容,如果未能解决你的问题,请参考以下文章

redis

Spring之Redis访问(Spring-data-redis)

Spring data redis-StringRedisTemplate 用法

Spring boot->redis value值出现两个双引号

分布式缓存技术redis学习系列----深入理解Spring Redis的使用

在 spring-data 项目中使用 @Version