我希望在使用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;
}
答案 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
的源代码来解决这个问题。