2017-10-14 170 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"); 
    } 
}