美文网首页
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