Mongodb 使用Spring boot的MongoTemplate自定义配置
在使用Spring boot应用程序(2.0.5)时,我希望更改mongoTemplate的WriteResultChecking属性。我通过扩展AbstractMongoConfiguration找到了一种方法,如下所示 我得到了同样的工作,但我发现这种方法有点冒险。 之所以这样说,是因为这种方法迫使我为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是维护与
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作为输入参数就足够了。