Spring 数据 mongodb 覆盖配置

Spring data mongodb override configuration

我有简单的 Maven 项目和 Spring-data-mongodb 项目。我需要指定(覆盖)数据库连接详细信息。 MongoDB 数据库 运行s 在本地主机上,默认设置(端口=27017)。我正在尝试使用 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

我找到了解决方案。 我使用了这个配置:

@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");
    }
}