【问题标题】:How to associate a redis CrudRepository to a database如何将 redis CrudRepository 关联到数据库
【发布时间】:2017-09-06 06:45:49
【问题描述】:

我在我的 spring-boot 1.4 应用程序上使用 spring-data-redis。我有两个不同的 CrudRepositories。但是,我很难将它们与各自的 Connection 工厂联系起来。

底线是:我希望 PersonRedisRepository 使用 db #6 和 OtherPurposeRedisRepository 使用 db #3。老实说,我不能 100% 确定我处理问题的方式是否正确。


存储库

interface PersonRedisRepository extends CrudRepository<Person, String> {

}

interface OtherPurposeRedisRepository extends CrudRepository<OtherPurpose, String> {

}

人员存储库配置

@EnableRedisRepositories(basePackageClasses = [PersonRedisRepository.class], redisTemplateRef = "personRedisTemplate")
class RedisConfigurationForPerson {

@Bean(name = "personFactory")
public RedisConnectionFactory personJedisConnectionFactory() {
    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory()
    jedisConnectionFactory.usePool = true
    jedisConnectionFactory.hostName = "127.0.0.1"
    jedisConnectionFactory.database = 6

    return jedisConnectionFactory
}

@Bean(name = "personRedisTemplate")
public RedisTemplate<byte[], byte[]> availabilityCacheRedisTemplate() {
    RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>()
    template.setConnectionFactory(personJedisConnectionFactory())

    template
}
}

其他用途存储库的配置

@EnableRedisRepositories(basePackageClasses = [OtherPurpsoseRepository.class], redisTemplateRef = "otherPurposeRedisTemplate")
class RedisConfigurationForOtherPurpose {

@Bean(name = "otherPurposeFactory")
public RedisConnectionFactory otherPurposeJedisConnectionFactory() {
    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory()
    jedisConnectionFactory.usePool = true
    jedisConnectionFactory.hostName = "127.0.0.1"
    jedisConnectionFactory.database = 3

    return jedisConnectionFactory
}

@Bean(name = "otherPurposeRedisTemplate")
public RedisTemplate<byte[], byte[]> otherPurposeRedisTemplate() {
    RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>()
    template.setConnectionFactory(otherPurposeJedisConnectionFactory())

    template
}
}

一切正常,我可以使用两个存储库进行读/写。但是,它们都在 db 6 上读/写。

【问题讨论】:

  • 你解决了吗?我也需要这种情况的解决方案。

标签: redis spring-data spring-data-redis spring-repositories


【解决方案1】:

另一个人和你有同样的问题。即使这些示例是针对 jpa 存储库的,这些链接也应该对您有所帮助:

Spring Boot Configure and Use Two DataSources

http://www.baeldung.com/spring-data-jpa-multiple-databases

您必须首先将配置数据源与@Primay 注释绑定并指定您正在处理的数据源。这是第一部分。我已经快速浏览了第二部分,稍后我会更深入。完成后会更新我的 psot ;)

【讨论】:

  • 感谢您的反馈,我已经访问过这些页面,但似乎我能够跟踪问题。由于某种原因,它只从最后一个带注释的类中读取注释@EnableRedisRepositories 属性“redisTemplateRef”。在这种情况下,“RedisConfigurationForOtherPurpose”。我是怎么做到的?我将“redisTemplateRef”的值更改为一些虚拟字符串,只有在找不到类“RedisConfigurationForOtherPurpose”的“redisTemplateRef”时,spring boot 才无法启动
  • 是的,Baeldung 上的方法似乎与您的不同。也许你应该尝试这种方式。不幸的是,下周之前我没有时间测试这个,如果你仍然有这个问题,我会尝试在我这边重现它;)
猜你喜欢
  • 1970-01-01
  • 2011-01-26
  • 2021-12-15
  • 2018-04-23
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
相关资源
最近更新 更多