2016-02-24 2 views
7

spring-dataで自動設定されたmongo-stuffを変更せずに、Spring-Boot-Application(1.3.2.RELEASE)内でMappingMongoConverterをカスタマイズするにはどうすればよいですか?自動設定を破ることなくSpring起動時にMappingMongoConverter(setMapKeyDotReplacement)をカスタマイズする方法は?

私の現在のソリューションは、次のとおりです。

@Configuration 
public class MongoConfig { 

    @Autowired 
    private MongoDbFactory mongoFactory; 

    @Autowired 
    private MongoMappingContext mongoMappingContext; 

    @Bean 
    public MappingMongoConverter mongoConverter() throws Exception { 
    DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoFactory); 
    MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext); 
    //this is my customization 
    mongoConverter.setMapKeyDotReplacement("_"); 
    mongoConverter.afterPropertiesSet(); 
    return mongoConverter; 
    } 
} 

は、これは正しい方法ですか私はこれでいくつかのものを壊すのですか?
mapKeyDotReplacementを設定するさらに簡単な方法がありますか?

答えて

5

これは正しい方法です。自動設定されたMappingMongoConverterには@ConditionalOnMissingBean(MongoConverter.class)の注釈が付けられているため、独自のMappingMongoConverter beanを追加すると、カスタムコンバーターのために自動設定がオフになります。

マイナーな修正が1つあります:mongoConverter.afterPropertiesSet()に電話する必要はありません。コンテナはそれをあなたのために呼ぶでしょう。

6

最新バージョンのスプリングブートでこの問題が発生しました。あなたのアプローチは私のために、または受け入れられた答えのために働かなかった...私のブートアプリケーションは私のカスタムマッピングコンバータを無視しているようだ。

私はconfigクラスで何をやったのですか?私はMappingMongoConverterでautowiredを使って、そのブートでsetMapKeyDotReplacementを設定しました。

@Autowired 
private MappingMongoConverter mongoConverter; 

// Converts . into a mongo friendly char 
@PostConstruct 
public void setUpMongoEscapeCharacterConversion() { 
    mongoConverter.setMapKeyDotReplacement("_"); 
} 
+1

あなたが私の答えを編集したオプション – LoganMzz

+0

おかげで、として依存関係( 'mongoConverter')を指定していないとしてnullチェックのための必要はありません。 –

関連する問題