MongoTemplate Custom Config с использованием весенней загрузки - PullRequest
0 голосов
/ 18 мая 2018

Я пытался изменить свойство WriteResultChecking mongoTemplate во время работы над загрузочным приложением Spring (2.0.5).Я нашел путь через расширение AbstractMongoConfiguration, как показано ниже.

Я получил ту же работу, однако я нашел этот подход немного рискованным.Говоря об этом, потому что этот подход заставил меня написать реализацию для

public MongoClient mongoClient() {
    return new MongoClient(host, port);
}

. Теперь MongoClient является центральным классом для поддержки соединений с MongoDB, и если я вынужден написать реализацию для того же самого, то я могу пропуститьОптимизация, которую делает Spring Framework.

Может кто-нибудь предложить какой-нибудь другой оптимальный способ переопределения некоторых свойств / поведения без необходимости слишком много возиться?

@Configuration
public class MyMongoConfigs extends AbstractMongoConfiguration {


    @Value("${spring.data.mongodb.database}")
    private String databaseName;

    @Value("${spring.data.mongodb.host}")
    private String host;

    @Value("${spring.data.mongodb.port}")
    private int port;


    @Override
    public MongoClient mongoClient() {
        return new MongoClient(host, port);

    }

    @Override
    protected String getDatabaseName() {
        return databaseName;
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        MongoTemplate myTemp = new MongoTemplate(mongoDbFactory(), mappingMongoConverter());
        **myTemp.setWriteResultChecking(WriteResultChecking.EXCEPTION);**
        return myTemp;
    }

Ответы [ 2 ]

0 голосов
/ 23 августа 2018

Это мой подход:

package app.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.WriteResultChecking;
import org.springframework.data.mongodb.core.convert.MongoConverter;

import com.mongodb.WriteConcern;

@Configuration
class ApplicationConfig {

  @Bean
  MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory, MongoConverter converter) {
    MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, converter);
    mongoTemplate.setWriteConcern(WriteConcern.MAJORITY);
    mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION);
    return mongoTemplate;
  }
}

Я понял это, проверив исходный код org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration.

0 голосов
/ 18 мая 2018

Вы в правильном направлении.Используя AbstractMongoConfiguration, вы переопределяете настройки, которые вам нужно настроить, и это правильный способ сделать это.AbstractMongoConfiguration по-прежнему является классом Spring Provided, поэтому вам не нужно беспокоиться об оптимизации, если только вы не возитесь с вашей конфигурацией.

...