本文尝试用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);
}
}
网友评论