2017-10-14 141 views
0

我有簡單的maven項目Spring-data-mongodb項目。我需要指定(覆蓋)數據庫連接的詳細信息。 MongoDB databse使用默認設置(port = 27017)在本地主機上運行。我試圖用AppConfig彈簧數據mongodb覆蓋配置

@Configuration 
@EnableMongoRepositories 
public class AppConfig extends AbstractMongoConfiguration { 

    @Override 
    protected String getDatabaseName() { 
     return "TestDatabase"; 
    } 

    @Override 
    public Mongo mongo() throws Exception { 
     // wrong port on purpose 
     return new MongoClient("127.0.0.1", 27007); 
    } 

} 

我的主要文件看起來像這樣

public class MongoApp { 

    private static final Log log = LogFactory.getLog(MongoApp.class); 

    public static void main(String[] args) throws Exception { 

    MongoOperations mongoOps = new MongoTemplate(new MongoClient(), "database"); 
    mongoOps.insert(new Person("Joe", 34)); 

    log.info(mongoOps.findOne(new Query(where("name").is("Joe")), Person.class)); 

// mongoOps.dropCollection("person"); 

    } 
} 

當我運行項目的一切工作正常,但我不應該有此配置。

項目結構

main 
-AppConfig.java 
-MongoApp.java 
-Person.java 
+0

一切都很優良。那你到底在問什麼?你想從application.properties獲取配置? – barbakini

+0

不知道我知道該怎麼做......我只是不明白爲什麼這個工作...因爲指定的端口27007是錯誤的。我的本地數據庫在27017上運行。所以我認爲我的AppConfig被忽略了 – TomP

+0

您是否試圖從db中獲取任何東西?春天可以懶洋洋地建立聯繫。所以沒有連接異常,直到第一個請求 – barbakini

回答

0

我找到了解決辦法。 我用這個配置:

@Configuration 
public class AppConfig { 

    public @Bean 
    MongoDbFactory mongoDbFactory() throws Exception { 
     return new SimpleMongoDbFactory(new MongoClient(), "mydb"); 
    } 

    public @Bean 
    MongoTemplate mongoTemplate() throws Exception { 

     MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory()); 

     return mongoTemplate; 

    } 

} 

及主文件,ApplicationContext

public class MongoApp { 

    private static final Log log = LogFactory.getLog(MongoApp.class); 

    public static void main(String[] args) throws Exception { 

     ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); 
     MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate"); 

     mongoOperation.insert(new Person("Joe", 34)); 
     log.info(mongoOperation.findOne(new Query(where("name").is("Joe")), Person.class)); 
      //mongoOps.dropCollection("person"); 
    } 
}