Mongodb 使用Spring boot的MongoTemplate自定义配置

Mongodb 使用Spring boot的MongoTemplate自定义配置,mongodb,spring-boot,spring-data-mongodb,Mongodb,Spring Boot,Spring Data Mongodb,在使用Spring boot应用程序(2.0.5)时,我希望更改mongoTemplate的WriteResultChecking属性。我通过扩展AbstractMongoConfiguration找到了一种方法,如下所示 我得到了同样的工作,但我发现这种方法有点冒险。 之所以这样说,是因为这种方法迫使我为 public MongoClient mongoClient() { return new MongoClient(host, port); } 现在MongoClient是维护与

在使用Spring boot应用程序(2.0.5)时,我希望更改mongoTemplate的WriteResultChecking属性。我通过扩展AbstractMongoConfiguration找到了一种方法,如下所示

我得到了同样的工作,但我发现这种方法有点冒险。 之所以这样说,是因为这种方法迫使我为

public MongoClient mongoClient() {
    return new MongoClient(host, port);
}
现在MongoClient是维护与MongoDB连接的中心类,如果我被迫为它编写实现,那么我可能会错过spring框架所做的优化

是否有人可以建议任何其他最佳方式来覆盖某些属性/行为,而不必修改太多

@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;
    }

你的方向是正确的。使用
AbstractMongoConfiguration
可以覆盖需要自定义的配置,这是正确的方法
AbstractMongoConfiguration
仍然是Spring提供的类,因此您不必担心优化,除非您弄乱了配置。

这是我的方法:

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

的源代码发现了这一点,不需要使用MongoConverter,只需将MongoDatabaseFactory作为输入参数就足够了。