spring boot整合Morphia对MongoDB进行操作

               最近有些空闲,在写一点小程序,在编写过程中需要用到MongoDB,最开始是按照别人的做法使用了springboot提供的

一个依赖为:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
然后在应用程序中编写相关程序,为以下:

@Configuration
@ConditionalOnClass(Mongo.class)
@EnableConfigurationProperties(MongoProperties.class)
public class MongoAutoConfiguration {

    @Inject
    private MongoProperties properties;

    private Mongo mongo;

    @PreDestroy
    public void close() {
        if (this.mongo != null) {
            this.mongo.close();
        }
    }

    @Bean
    @ConditionalOnMissingBean
    @Singleton
    public Mongo mongo() throws UnknownHostException {
        this.mongo = this.properties.createMongoClient(null);
        return this.mongo;
    }

}
另外还需要在application.properties中配置相关mongodb的配置,为以下所示:

#mongodb
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.database=test
如此的编写后,确实是可以使用Springboot提供的MongoTemplate进行相应MongoDB操作,但是问题在于本人并不熟悉这一套API的

用法,有一些查询的操作用着很不顺手,在进过思虑之后,决定还是不再使用spring-data中的mongodb的API操作。

本人一直比较熟悉Morphia里面的一套API,并且Morphia提供的一套API的链式编程相当易用,所以还是决定将Morphia整合进当前的

项目中,首先引入Morphia的依赖,为以下:

    <dependency>
      <groupId>org.mongodb.morphia</groupId>
      <artifactId>morphia</artifactId>
      <version>1.1.1</version>
    </dependency>
先前编写的提供Mongo的Bean可以不用动,Morphia提供Datastore的方法中需要一个MongoClient对象,而Mongo是MongoClient父类,

直接强转过来就行了,至于需要相应的数据库名,可以使用已经注入好的MongoProperties中获取,具体源码如下:

@Configuration
@ConditionalOnClass(Mongo.class)
public class MorphiaFactory {

    @Inject
    private Mongo mongo;

    @Inject
    MongoProperties mongoProperties;

    @Bean
    public Datastore get() {
        Morphia morphia = new Morphia();
        return morphia.createDatastore((MongoClient) mongo,mongoProperties.getDatabase());
    }
}
如此,对Morphia的整合就完成了,在程序中就可以用到Datastore,从而对Mongodb中collection数据进行操作。

你可能感兴趣的:(mongodb,Morphia,springboot)