Spring数据mongodb覆盖配置

时间:2017-10-14 11:41:37

标签: java mongodb maven spring-data-mongodb

我有Spring-data-mongodb项目的简单maven项目。我需要指定(覆盖)数据库连接细节。 MongoDB数据库使用默认设置(port = 27017)在localhost上运行。我正在尝试使用AppConfig

@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

1 个答案:

答案 0 :(得分: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");
    }
}