我有2个Mongodb数据库通过2个MongoTemplate-s连接到Spring Boot应用程序:

mongoTemplate (默认bean名称,连接到默认db)

mongoAppTemplate (在运行时连接到另一个数据库)

我有很多使用mongoTemplate的MongoRepository-,但我也想创建一些使用mongoAppTemplate的东西。

如何将2个MongoRepository-s配置为在Java配置中使用不同的MongoTemplate -s?

我找到了一种使用XML的方法(下面的链接),但是我真的想保留所有基于注释的方法

Spring-data-mongodb connect to multiple databases in one Mongo instance

最佳答案

基本思想是将包含您的存储库的包层次结构分为两个不同的路径:

  • com.whatever.repositories.main包,用于主数据库存储库接口(interface)
  • 其他数据库存储库接口(interface)的
  • com.whatever.repositories.secondary软件包

  • 您的XML配置应如下所示:
    <mongo:repositories base-package="com.whatever.repositories.main" mongo-template-ref="mongoTemplate"/>
    <mongo:repositories base-package="com.whatever.repositories.secondary" mongo-template-ref="mongoAppTemplate"/>
    

    编辑

    @EnableMongoRepositories批注不是@Repeatable,但是您可以有两个@Configuration类,每个类都用@EnableMongoRepositories批注,以便使用批注实现相同的目的:
    @Configuration
    @EnableMongoRepositories(basePackages = "com.whatever.repositories.main", mongoTemplateRef = "mongoTemplate")
    public class MainMongoConfig {
        ....
    }
    
    @Configuration
    @EnableMongoRepositories(basePackages = "com.whatever.repositories.secondary", mongoTemplateRef = "mongoAppTemplate")
    public class SecondaryMongoConfig {
        ....
    }
    

    第三个带@Configuration注释的类,其他两个带有@Import的类。

    09-16 06:54