春季启动时没有存储库的多个mongo

时间:2020-06-17 15:07:55

标签: java spring mongodb spring-boot

我正在尝试在春季靴中配置两个mongos。但它总是只收到一个,这就是我的代码。

Mongo 1配置

@Configuration
public class MongoOneConfiguration extends AbstractMongoConfiguration {

    @Override
    @Bean(name = "mongoOneClient")
    public MongoClient mongoClient() {
        return new MongoClient(new ServerAddress(mongoOnehostname, mongoOnehostport), 
                new MongoClientOptions.Builder()
                    .connectTimeout(mongoOneConnTimeoutMillis)
                    .build());
    }

    @Override
    public String getDatabaseName() {
        return mongoOneDatabaseName;
    }

    @Bean(name = "mongoOneTemplate")
    public MongoOperations mongoOperations() {
        try {
            return mongoTemplate();
        } catch (Exception e) {

        }
    }
}

Mongo 2配置

@Configuration
public class MongoTwoConfiguration extends AbstractMongoConfiguration {

    @Override
    @Bean(name = "mongoTwoClient")
    public MongoClient mongoClient() {
        return new MongoClient(new ServerAddress(mongoTwohostname, mongoTwohostport), 
                new MongoClientOptions.Builder()
                    .connectTimeout(mongoTwoConnTimeoutMillis)
                    .build());
    }

    @Override
    public String getDatabaseName() {
        return mongoTwoDatabaseName;
    }

    @Bean(name = "mongoTwoTemplate")
    public MongoOperations mongoOperations() {
        try {
            return mongoTemplate();
        } catch (Exception e) {

        }
    }
}

道1:

@Component
public class MongoOneDao  {
    @Autowired
    @Qualifier("mongoOneTemplate")
    private MongoOperations mongoOneTemplate;


    public List<Person> getAll() {
        return mongoOneTemplate.findAll(Person.class);
    }
}

道2:

@Component
public class MongoTwoDao  {
    @Autowired
    @Qualifier("mongoTwoTemplate")
    private MongoOperations mongoTwoTemplate;


    public List<Person> getAll() {
        return mongoTwoTemplate.findAll(Person.class);
    }
}

无论我使用MongoOneDao还是MongoTwoDao,它总是调用相同的数据库。你能帮助我所缺少的吗?

PS:我不想使用存储库。

2 个答案:

答案 0 :(得分:0)

我认为您应该在配置中创建2个不同的MongoDbFactory实例,并使用不同的工厂来创建不同的MongoTemplates。请看一下Link。可能有帮助

答案 1 :(得分:0)

@Configuration
public class MongoOneConfiguration {

    @Bean
    public MongoClient mongoOneClient() {
        return new MongoClient("localhost");
    }

    @Bean
    public MongoTemplate mongoOneTemplate() throws Exception {
        return new MongoTemplate(mongoOneClient(), "db1");
    }
}
 @Configuration
public class MongoTwoConfiguration {


    public MongoClient mongoTwoClient() {
        return new MongoClient("localhost");
    }

    @Bean
    public MongoTemplate mongoTwoTemplate() throws Exception {
        return new MongoTemplate(mongoTwoClient(), "db2");
    }
}

用不同的数据库定义两个不同的mongo模板,它应该可以工作。