美文网首页
spring boot不使用spring data整合mongo

spring boot不使用spring data整合mongo

作者: nextliving | 来源:发表于2018-07-11 16:02 被阅读134次

    本文尝试用spring boot整合mongodb,并且不使用spring data。采用官方的mongodb驱动3.6.4,对应的文档参考MongoDB Java Driver Documentation,这种方式主要依赖于MongoClient来实现和mongo服务的交互。

    创建项目

    创建一个名为mongodb-without-springdata-demo的spring boot项目,不要勾选任何依赖。

    导入依赖

    mongodb可以使用同步模式的MongoDB Driver或者异步模式的MongoDB Async Driver,它们都依赖于更底层的Core driver。这里选用同步模式的MongoDB Driver,只需要导入一个依赖:

    
     <dependency>
    
     <groupId>org.mongodb</groupId>
    
     <artifactId>mongodb-driver</artifactId>
    
     <version>3.6.4</version>
    
     </dependency>
    
    

    maven会自动导入bson以及mongodb-driver-core依赖。

    添加java配置类

    新建MongodbConfig.java配置类,内容如下:

    
    package com.ms.config;
    
    import org.springframework.beans.factory.annotation.Value;
    
    import org.springframework.context.annotation.Bean;
    
    import org.springframework.context.annotation.Configuration;
    
    import org.springframework.context.annotation.PropertySource;
    
    import com.mongodb.MongoClient;
    
    import com.mongodb.MongoClientURI;
    
    /**
    
     * mongoclient应该为单例,参考http://mongodb.github.io/mongo-java-driver/3.6/driver/getting-started/quick-start/
    
     * propertySource和value注解配合使用案例参考https://gist.github.com/Gert-Jan1966/2945fc67659e6e99bdfd64d00def6780
    
     * @author iengchen
    
     * @since 2018-07-11
    
     */
    
    //@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文)。
    
    //参考https://blog.csdn.net/javaloveiphone/article/details/52182899
    
    @Configuration
    
    @PropertySource(value="classpath:mongodb.properties")
    
    public class MongodbConfig {
    
    @Value("${mongo.uri}")
    
    private String connectionString;
    
    //@Bean标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的<bean>,作用为:注册bean对象
    
    //@Bean注解在返回实例的方法上,如果未通过@Bean指定bean的名称,则默认与标注的方法名相同; 
    
    //@Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;
    
    //https://blog.csdn.net/javaloveiphone/article/details/52182899
    
    @Bean
    
    public MongoClient mongoClient() {
    
    MongoClientURI uri = new MongoClientURI(connectionString);
    
    MongoClient mongoClient = new MongoClient(uri);
    
    return mongoClient;
    
    }
    
    }
    
    

    注意,在任何需要操作mongodb的地方注入MongoClient即可,它是线程安全的,MongoDB Driver Quick Start对此有如下说明:

    
    Typically you only create one MongoClient instance for a given MongoDB deployment (e.g. standalone, replica set, or a sharded cluster) and use it across your application. 
    
    

    注意,整个应用程序结束时应该使用MongoClient.close()关闭连接。

    添加mongodb配置文件

    在src/main/resources路径下新建mongodb配置文件mongodb.properties,内容如下

    
    mongo.uri=mongodb://abc:abc@cluster0-shard-00-00-75shm.gcp.mongodb.net:27017,cluster0-shard-00-01-75shm.gcp.mongodb.net:27017,cluster0-shard-00-02-75shm.gcp.mongodb.net:27017/?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true
    
    

    这是一个connection uri,它会连接到mongodb atlas上的一个由3个节点组成的replica set。authentication database通过authSource指定,这里是admin数据库。关于如何在mongodb atlas上创建免费的replica set集群参考mongodb atlas初探.

    关于uri的解释参考mongodb官方的Connection String URI Format以及mongodb java driver文档Connect to MongoDB。并且Connect to MongoDB提到了如何连接replica set或者shard cluster.

    添加测试方法

    测试类为MongodbWithoutSpringdataDemoApplicationTests.java,内容如下:

    
    package com.ms;
    
    import org.bson.Document;
    
    import org.junit.Test;
    
    import org.junit.runner.RunWith;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    import org.springframework.boot.test.context.SpringBootTest;
    
    import org.springframework.test.context.junit4.SpringRunner;
    
    import com.mongodb.MongoClient;
    
    import com.mongodb.client.MongoCollection;
    
    import com.mongodb.client.MongoDatabase;
    
    @RunWith(SpringRunner.class)
    
    @SpringBootTest
    
    public class MongodbWithoutSpringdataDemoApplicationTests {
    
    @Autowired
    
    private MongoClient mongoClient;
    
    @Test
    
    public void contextLoads() {
    
    }
    
    @Test
    
    public void testInsertone() {
    
    MongoDatabase database = mongoClient.getDatabase("july");
    
    MongoCollection<Document> collection = database.getCollection("11");
    
    Document document = new Document("name","iengchen")
    
    .append("action", "lunch")
    
    .append("time", "11:30");
    
    collection.insertOne(document);
    
    }
    
    }
    
    

    相关文章

      网友评论

          本文标题:spring boot不使用spring data整合mongo

          本文链接:https://www.haomeiwen.com/subject/wsihpftx.html