【问题标题】:Spring Boot & Mongo: custom MappingMongoConverter doesn't work during DotReplacementSpring Boot 和 Mongo:自定义 MappingMongoConverter 在 DotReplacement 期间不起作用
【发布时间】:2018-02-12 03:16:48
【问题描述】:

我需要实现 dotReplacementKey

我正在使用具有此类配置的 MongoDB:

@Configuration
public class MongoTemplateConfig {

@Value("${adserver_mongo_connection_string}")
private String databaseConnectionString;

@Bean
public MongoDbFactory mongoDbFactory() throws UnknownHostException {

    MongoClientURI uri = new MongoClientURI(databaseConnectionString.trim());
    return new SimpleMongoDbFactory(uri);
}

@Bean
public MongoTemplate mongoTemplate() throws UnknownHostException {
    return new MongoTemplate(mongoDbFactory());
}

@Bean
public MappingMongoConverter mongoConverter(MongoDbFactory mongoFactory, MongoMappingContext mongoMappingContext) throws Exception {
    DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoFactory);
    MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
    mongoConverter.setMapKeyDotReplacement(".");

    return mongoConverter;
}
}

我正在按如下方式进行更新: mongoTemplate.bulkOps(...).upsert(...)

但是在运行时通过调试我发现使用了不同的 MappingMongoConverter 而不是这个被配置为@Bean

顺便说一句,如果在 MappingMongoConverter 的任何地方使用@Inject,我会从带有 keyDotReplacement="." 的配置中获得正确的 bean。 但看起来 Spring Boot 在后台使用了另一个

附:我已经看到这个question 没有正确答案,但用mongoConverter.afterPropertiesSet() 尝试过,显然它不起作用

【问题讨论】:

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


    【解决方案1】:

    有点可笑,但重点是我们应该把这个自定义的mappingMongoConverter传递给MongoTemplate初始化

    @Bean
    public MongoTemplate mongoTemplate(MappingMongoConverter mappingMongoConverter) throws UnknownHostException {
        return new MongoTemplate(mongoDbFactory(), mappingMongoConverter);
    }
    

    【讨论】:

    • 感谢这一点。使用不同的选项后它起作用了。
    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2023-01-31
    • 1970-01-01
    • 2023-02-14
    相关资源
    最近更新 更多