使用Spring启动的MongoTemplate自定义配置

时间:2018-05-18 13:47:32

标签: mongodb spring-boot spring-data-mongodb

我希望在使用Spring启动应用程序(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;
    }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这是我的方法:

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的源代码来解决这个问题。