Spring Data mongodb联合尝试--我如何获得接口方法来使用自定义配置的mongotemplate?

qoefvg9y  于 2023-05-22  发布在  Go
关注(0)|答案(1)|浏览(96)

在我的应用程序中,我需要能够连接到任意数量的mongodb主机,以及这些主机中任意数量的数据库,以支持至少这种基本级别的查询联合。这是由配置指定的,因此,对于任何给定的应用程序安装,我无法提前知道我需要访问多少集合。我的尝试基于我在this Baeldung article中看到的配置,并进行了一些修改以满足我的需求。我的配置看起来像这样的yaml:

datasources:
  - name: source1
    uri: mongodb://user1:pass1@127.0.0.1:27017
    fq_collection: db1.coll1
  - name: source2
    uri: mongodb://user1:pass1@192.168.0.100:27017
    fq_collection: db2.coll2

而且,根据安装的不同,可以有任意数量的数据源条目。因此,在我的@Configuration类中,我可以迭代通过配置属性注入的这些条目。但是我想创建一个MongoTemplate,我可以为每一个设置,因为我不能依赖于默认的MongoTemplate。我尝试的解决方案是创建一个存储库接口,然后创建一个自定义的impl,它将接受配置的MongoTemplate。当我使用此代码创建每个Repository示例及其模板时:

public MongoRepository<String, Item> mongoCustomRepositories(MongoTemplate template) {
    MyCustomMongoRepository customImpl = new MyCustomMongoRepositoryImpl(template);
    MongoRepositoryFactory repositoryFactory = new MongoRepositoryFactory(template);
    return repositoryFactory.getRepository(MyMongoRepository.class, customImpl);
}

我从一个@Bean方法调用它,该方法返回从配置项创建的所有这些存储库的列表,我可以将存储库注入到服务类中。
更新/编辑:好的,我将mongodb profiling设置为2,以便记录查询。事实证明,实际上,查询 * 正在 * 发送到mongodb,但问题是没有为模型设置集合名称。我不敢相信我忘记了这一点,但我确实忘记了,所以它使用了小写的驼峰式模型类名,这将确保没有要检索的文档。我有默认的集合名称,但具体的集合名称是在配置中设置的,如示例YAML所示。我有几个想法,但如果有人有关于如何动态设置这些的建议,那么这将有很大帮助。
编辑2:我做了一堆工作,我有它 * 几乎 * 工作。然而,在这样做的过程中,我发现了spring-data-mongodb中的一个bug,我提交了一个issue

ndasle7k

ndasle7k1#

https://github.com/spring-projects/spring-data-mongodb/issues/4231得到解决并且相应的版本可用时,这个问题的解决方案就会出现。

相关问题