2017-06-11 44 views
0

我正嘗試使用MongoDB作爲基於Spring Boot的web應用程序的持久性存儲。我在MongoConfig.java類中編寫了所有mongoDB配置。但是,春天似乎沒有閱讀該類的配置。Spring Boot不會從Java類讀取MongoDB配置

這裏是MongoConfig.java

@Configuration 
@EnableMongoRepositories 
public class MongoConfig { 

    @Bean 
    public MongoClientFactoryBean mongoClientBean() { 
     MongoClientFactoryBean mongoClientFactory = new MongoClientFactoryBean(); 
     mongoClientFactory.setHost("X.X.X.X"); 
     return mongoClientFactory; 
    } 


    @Bean 
    public MongoOperations mongoTemplate(Mongo mongo) { 
     return new MongoTemplate(mongo, "TestDB"); 
    } 
} 

這是我Application.java

@SpringBootApplication 
@Import(MongoConfig.class) 
public class Application { 

    public static void main(String args[]) { 
     SpringApplication.run(Application.class); 
    } 
} 

我有相同的封裝MongoRepository,一切工作正常,如果我只是把我的配置到application.properties。但是,當我刪除application.properties時,Spring不會從MongoConfig類讀取mongoDB配置。相反,它會嘗試連接到localhost上的默認MongoDB。

如何讓spring從MongoConfig.java類中讀取該配置?

回答

0

您必須重寫正確的bean才能使其全部與java config配合使用。

幕後的春季啓動使用兩個自動配置,MongoAutoConfigurationMongoDataAutoConfiguration來設置MongoDB配置。

所以連接到不同的主機,你必須創建正確的MongoClientMongoDbFactory豆,從這裏春天應該能夠使用這些bean創建配置的其餘部分,像MongoTemplateMongoRepository

使用@Primary來指示spring選擇你的bean而不是自動配置的bean。

@[email protected] 
public MongoClient mongo() throws UnknownHostException { 
    return new MongoClient(host); 
} 

@[email protected] 
public MongoDbFactory getMongoDbFactory() throws Exception { 
    return new SimpleMongoDbFactory(mongo(), dbname); 
} 
相關問題